requests爬虫需要注意的点
header头的处理
requests添加header头后可以访问大部分的网页,下面是访问某个网址时某个请求的header头,和公司业务有关,这里网址就不贴出来了。只分析里面的关键部分User-agent,Referer,Cookie,RequestVerificationToken
1. user-agent主要有分手机的和电脑的,有些网页会根据不同的ua返回不同的内容,下面给出几个ua。
电脑ua:
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
手机ua:
iPhone---IOS---QQ浏览器 ---Mozilla/5.0 (iPhone 84; CPU iPhone OS 10_3_3 like Mac OS X) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.0 MQQBrowser/7.8.0 Mobile/14G60 Safari/8536.25 MttCustomUA/2 QBWebViewType/1 WKType/1
荣耀9---Android---QQ浏览器 ---Mozilla/5.0 (Linux; Android 7.0; STF-AL10 Build/HUAWEISTF-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080
2.有些网站会根据header头的referer来判断是否是爬虫,referer即当前所在网页的url,可以自己伪造。
header = {
'Referer':'https://www.baidu.com',
'User-Agent':'Mozilla/5.0 (Linux; Android 7.0; STF-AL10 Build/HUAWEISTF-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043508 Safari/537.36 V1_AND_SQ_7.2.0_730_YYB_D QQ/7.2.0.3270 NetType/4G WebP/0.3.0 Pixel/1080'
}
r = requests.get("https://www.jianshu.com", headers=header)
3.cookie的话这里一般都会由服务端返回,有些会在客户端用服务端返回的js生成,这里我发现它是由服务端返回的。
这样的话,可以用requests把它提取出来
r = requests.get(url, headers=header)
cookie = requests.utils.dict_from_cookiejar(r.cookies)
下次访问的话可以带上
r = requests.get(url, headers=header,cookies = cookie)
4.RequestVerificationToken的话类似cookie,可以由js生成或者是藏在某个地方返回,用来验证是不是同一个请求。一般藏在返回的html的头部或尾部。这里在返回html文档的尾部找到token。提取出来,header头直接带上即可。