写爬虫经常被封锁,常用的策略有伪装成浏览器,降低访问频率,还有一个是修正一下重新爬。关于代理IP不在本文范畴,我们只需要够用的数据即可,一般一个IP,一台机器慢慢的爬就可以了。
分别看看这几个策略的实现方式:
伪装成浏览器 这是最简单的方式之一,打开开发者工具(F12键),刷新网页。找到骑牛中的headers和cookies参数
import requests
def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
cookies = {'Cookie':'你的cookies'}
resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""
#待爬urls
urls = [...]
for url in urls:
scraper(url)
降低访问频率 只是模仿成浏览器,网站仍然会封锁你的爬虫。因为咱们的爬虫访问实在是太快了,人家网站服务器hold不住人民群众的爬虫。所以为了不被封锁,可再加上降低访问频率策略。
import requests
import time
def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
cookies = {'Cookie':'你的cookies'}
resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""
#待爬urls
urls = [...]
for url in urls:
scraper(url)
time.sleep(1)
三、锲而不舍slow but steady的精神。 很多网站往往不会封锁你的IP,但是访问受限。比如访问十次该网址,就会封锁你,导致程序报错。我们过断时间咱们重新运行程序,又可以爬数据。
为了减少麻烦,我们可以设置的策略:
当我们知道自己的爬虫被封锁后,降低访问频率,但是还是要一直发送请求。锲而不舍,直到又可以爬。坚持就是胜利。
import requests
import time
def scraper(url):
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
cookies = {'Cookie':'你的cookies'}
resp = requests.get(url,headers,cookies)
"""省略。。。解析网页"""
"""省略。。。保存数据"""
#拥有锲而不舍精神的爬虫(slow but steady)
def scraper_with_perseverance(url):
Flag = True
while Flag:
try:
#正常爬取,爬取成功后退出循环
scraper(url)
Flag = False
except:
#被网站封锁后,降低访问频率,但仍坚持重复访问,
#直到爬取到该url的数据,退出本url的爬虫
Flag = True
time.sleep(5)
#待爬urls
urls = [...]
for url in urls:
scraper_with_perseverance(url)
time.sleep(1)
记住锲而不舍,像乌龟学习。只要让爬虫拥有了中华民族的传统美德,一般情况下数据都能拿到。
tips 如果爬的还是太多,建议使用代理IP,但是代理IP对于初学者有点难度。如果能对小白友好的方式愉悦的上网和更改IP,还能畅游海内外网站,而且又能接受付点费用这点小代价,那么可以采纳大邓的tips。网址在下面的图片中,可手动敲入该网址。