让爬虫采集效率提高的策略
2022-09-02 16:49:42
  • 0
  • 0
  • 0

我们都知道在采集数据过程中,尤其是爬取大量数据的时候,很多网站都有反爬虫措施,封ip是很严重的,,让你在采集的时候很心烦。本文就如何解决这个问题总结出一些应对措施,这些措施可以单独使用,也可以同时使用,效果更好。

一 、伪造User-Agent

在请求头中把User-Agent设置成浏览器中的User-Agent,来伪造浏览器访问。比如:

headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}

resp = requests.get(url,headers = headers)

在每次重复爬取之间设置一个随机时间间隔

# 比如:

time.sleep(random.randint(0,3)) # 暂停0~3秒的整数秒,时间区间:[0,3]

# 或:

time.sleep(random.random()) # 暂停0~1秒,时间区间:[0,1)

而且最主要的是ua要越多越好,不要固定的使用那几个,要经常更换最新真实的ua。

二、伪造cookies

若从浏览器中可以正常访问一个页面,则可以将浏览器中的cookies复制过来使用,比如:

cookies = dict(uuid='b18f0e70-8705-470d-bc4b-09a8da617e15',UM_distinctid='15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd')

resp = requests.get(url,cookies = cookies)

# 把浏览器的cookies字符串转成字典

def cookies2dict(cookies):

items = cookies.split(';')

d = {}

for item in items:

kv = item.split('=',1)

k = kv[0]

v = kv[1]

d[k] = v

return d

注:用浏览器cookies发起请求后,如果请求频率过于频繁仍会被封IP,这时可以在浏览器上进行相应的手工验证(比如点击验证图片等),然后就可以继续正常使用该cookies发起请求。

三、使用代理

可以换着用多个代理IP来进行访问,防止同一个IP发起过多请求而被封IP,比如:

# 要访问的目标页面

targetUrl = "http://httpbin.org/ip"

# 要访问的目标HTTPS页面

# targetUrl = "https://httpbin.org/ip"

# 代理服务器

proxyHost = "t.16yun.cn"

proxyPort = "31111"

# 代理隧道验证信息

proxyUser = "username"

proxyPass = "password"

proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {

"host" : proxyHost,

"port" : proxyPort,

"user" : proxyUser,

"pass" : proxyPass,

}

# 设置 http和https访问都是用HTTP代理

proxies = {

"http" : proxyMeta,

"https" : proxyMeta,

}(这里是用的亿牛云的动态转发代理进行示例)

不管我们采集什么网站的数据,光有代理是不行的,要配合多种反爬策略一起才能更高效的获取大量的数据。

 
最新文章
相关阅读