以拉勾网为例说说反反爬的思路

User-Agent

为 request 添加 user-agent 后尝试。可以说这是任何爬虫都需要做的伪装。

Proxy

大部分情况下需要上代理池,从而规避 IP ban。

Cookie

有的网站,则会根据你的 cookie 识别你是人还是机器。

步骤(以拉勾网为例)

  1. 关闭浏览器的 cookie 并删除掉现有 cookie,然后访问页面,如果页面不正常,则可推定网站采用了 cookie 反爬。

贴士:可以点击 chrome 地址栏的小锁,然后删除 cookie,不用全部清除,因为这会导致你需要重新登录各种网站。

  1. 打开 postman.app,启动 interceptor 并清空 history。初次使用会让你装一个 chrome app。
    也可以用 brew 安装:
brew cask install postman
Postman 配置.png
  1. 接下来清空浏览器上该页面的 cookie。然后刷新页面,此时 postman 会获取到浏览器的各种请求。通过 chrome 的 network 找到其中返回目标数据的那一个请求。
  2. 在 postman 中“重现”这个访问。通过筛查发现,只需要保留 User-Agent 和 Referer 这两项在 headers 里就能正确返回数据。这是因为启动 interceptor 之后 postman 和 chrome 是连通的,前者能获取后者的 cookie。
  3. 逐步删除 cookie 并重试,就能最终确定起作用的 cookie 是什么。本例中发现,只需要 user_trace_token 这一项即可拿到数据。
  4. 可以通过访问页面先拿 cookie。
from urllib import request  
from http import cookiejar  
  
if __name__ == '__main__':  
    # 声明一个CookieJar对象实例来保存cookie  
    cookie = cookiejar.CookieJar()  
    # 利用urllib.request库的HTTPCookieProcessor对象来创建cookie处理器,也就CookieHandler  
    handler=request.HTTPCookieProcessor(cookie)  
    # 通过CookieHandler创建opener  
    opener = request.build_opener(handler)  
    # 此处的open方法打开网页  
    response = opener.open('https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=')  
    # 打印cookie信息  
    for item in cookie:  
        print('Name = %s' % item.name)  
        print('Value = %s' % item.value) 
# 输出
Name = user_trace_token
Value = 20180527163349-64c256fa-556c-43e8-827e-c016f4b15cda

以上。

参考文献:
https://www.jianshu.com/p/a2f74805e54f
http://www.shenjianshou.cn/blog/?p=289

你可能感兴趣的:(以拉勾网为例说说反反爬的思路)