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. 好吧, 没了

其实,如果你完全根据抓包所得的请求方式来请求,问题就会减少很多。