Python爬虫小总结
1. POST还是GET?
请求网页,我们主要用到的GET和POST。
一般来说,对某个url,我们使用get或post去请求,都能得到预想中的内容。
有些情况,服务器会在某个url上,会针对POST和GET的请求的不同,做出不同的反应。
某些服务器,在某个url的响应下,只做了POST的响应,这时就GET不到了。
请求不到内容时,不妨这里想想。
2. 正则提取不了想要的内容
很多时候我们会用到(.*?)来匹配内容,如果内容间出现了换行符\n(.可以匹配除了换行符(\n)以外的任意一个字符),那你就无法得到内容!
针对换行,你看到的换行字符可能是\r\n, 也有可能只是\n。
针对空格,有可能是键盘敲出来的空格’ ‘,也有可能是ASCII码中的控制字符。
往往所见不是所得,最好直接复制内容,这样能避免很多问题的出现!
3. 乱码
详见: 常见编码问题解决方法
注意: 若出现部分乱码,应该是编码集不够大。
如对以gbk进行编码的文本,却使用gb2312对其进行解码,就会出现部分乱码。
以utf-8去解码以utf-8编码的response,无法得到中文,得到的都是\x字符。
此时,headers中要删除
'accept-encoding': 'gzip, deflate, br',
response.content.decode(‘utf-8’)后,即可得到正常编码。
4. 被封ip了
爬取速率过高了,添加延迟及使用代理ip即可
5. headers中一定要包含抓包中的所有东西么?
一句话,你永远不可能提前知道服务器需要检测什么。
哪些url可以精简,哪些键值对不需要,你得自己测试!
6. selenium与requests更换cookies
详见: Selenium与requests相互更换cookies
7. data={},键值对都正确,获取不到数据
使用data={},默认以utf8的方式把非英文字符以url%形式编码。
存在一些服务器,是以gb方式解码用户的请求。
这种情况下,客户端以utf方式编码请求,服务端以gb方式解码请求,数据不搭配,自然获取不到数据。
解决方法:
法一
自行gb方式编码 并 拼接url
法二
拼接url,再urllib.quote(encoding=’相应编码’)
此外,对于同一个网站,某些url需要将空格替换为+,有些url则可能需要另作处理。
总之,灵活变化。
8. 其它问题
session中频繁更换ua,有可能会起反作用。
每一次拨号,会更换一次ip,可以考虑被反爬时,断开连接再重新拨号。
9. 好吧, 没了
其实,如果你完全根据抓包所得的请求方式来请求,问题就会减少很多。