0. 网络爬虫中遇到了封锁,原因是什么?
有经验的开发者在进行网络爬虫时,肯定会经历封锁。
你的爬虫可能很完美,但是你可能不知道问题出在哪里,感到沮丧吗?
本篇文章将以解决方案为中心,探讨了一些常见的封锁原因。
爬虫就像进入商店并获取想要的商品一样。我们进入商店时必须遵守一些默契规则。比如进店时要清除鞋上的灰尘,将雨伞摇好放在伞架上,穿着不要给他人带来不便等。
有些商店可能有老板独有的规矩。在这种情况下,必须遵守这些规矩才能使用该商店。就像现在流行的咖啡馆要求“通过DM进行咨询”,餐厅要求自己归还托盘,或者像把座位留下而离开的情况一样。
同样,网络爬虫也有必须遵守的规则。其中一个主要原因是,如果请求中缺少User-Agent或其他参数,或者这些参数设置得很奇怪,网站会认定为机器人并进行封锁。
因此,最基本的是要像设置为非机器人的User-Agent一样开始。
1. 尝试设置User-Agent
设置User-Agent的方法是将User-Agent值放入HTTP请求标头中。User-Agent值是表示网络浏览器或HTTP客户端类型和版本的字符串。
例如,Chrome浏览器使用以下User-Agent值。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
如果在爬虫中设置了User-Agent值,网站将认为该请求是由浏览器发送的请求。因此,如果不设置User-Agent值,网站可能会认为该请求是由爬虫发送的请求,从而增加被封锁的可能性。
设置User-Agent值的方法因HTTP请求库而异,但通常可以在HTTP请求标头中设置User-Agent值。在Python中,使用requests库时,可以如下设置User-Agent值。
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}
response = requests.get("http://example.com", headers=headers)
如此,在requests库中,可以通过headers参数设置HTTP请求标头中的User-Agent值。
然而,最近网站不仅仅通过User-Agent,还通过更多方式尝试阻止爬虫,因此除了设置User-Agent外,最好还同时使用其他方法。例如,经常更改IP地址,调整爬取速度等方法。
2. 尽可能频繁地更改IP地址
使用相同IP地址不断发送请求可能会让网站觉得很可疑。
更改IP地址的简单方法之一是使用VPN。VPN是Virtual Private Network的缩写,通过互联网连接隐藏用户的IP地址并更改为其他地区的IP地址的服务。
使用VPN可以让您无需每次更改IP地址,通过VPN连接到互联网,因此被认为不会被封锁的可能性更高。此外,使用VPN还可以避免使用先前被封锁的IP地址,从而更稳定地进行爬取。
3. 不规则调整爬取速度
像机器一样准确地定时和间隔发送请求可能会被认为是机器人。因此,需要设置不规则的爬取速度。
调整爬取速度的方法大致有两种。
第一种方法是调整爬取请求之间的间隔。通常,如果短时间内频繁发送爬取请求,服务器会认为这是机器人并增加封锁的可能性。因此,最好以固定间隔发送爬取请求。
第二种方法是使用不同的IP地址。如果不断从同一IP地址发送爬取请求,服务器可能会认为这是机器人并增加封锁的可能性。因此,最好使用多个IP地址发送爬取请求。为此,可以使用代理服务器。
4. 设置准确的参数
在设置User-Agent时,我们设置了标头。
在进行爬取时,如果缺少应设置的参数或者设置了不应该设置的参数,可能会出现问题。
例如,如果未设置User-Agent值,则某些网站可能会认为这不是浏览器发送的请求而进行封锁。此外,如果设置了不应该包含的Cookie值并发送,则网站可能会认为这是机器人并进行封锁。
因此,在进行爬取时,务必仔细检查应设置的HTTP请求标头参数,以及是否存在不应该设置的参数,并进行相应调整。
5. 适当的异常处理
在进行爬取时,如果发生错误并持续发送相同请求,网站可能会认为这是机器人并增加封锁的可能性。因此,需要进行适当的异常处理。
异常处理是指为了应对程序执行过程中出现的意外情况而处理错误的做法。
例如,当发送HTTP请求时,如果服务器没有响应,则请求失败。在这种情况下,程序应该识别这一点,并在等待一段时间后重新发送请求以进行异常处理。
此外,如果发送违反规则的爬取请求,网站会进行封锁。在这种情况下,需要通过异常处理在程序中识别这一点,并停止请求。为此,在发送HTTP请求时,需要检查网站返回的状态代码,并根据情况进行异常处理。
异常处理在进行爬取时非常重要。通过适当的异常处理,可以更稳定地进行爬取。
结论
为了稳定进行网络爬虫,需要使用各种方法来避免网站的封锁,包括设置User-Agent、更改IP地址、不规则调整爬取速度、设置准确的参数以及适当的异常处理等。
如果遇到封锁问题,请检查上述5个原则是否得到很好的应用,希望您能取得良好的结果。




