在爬虫行业中使用爬虫代理是基本的操作,但是很多时候就算爬虫程序使用了代理ip后还是会遇到问题。关于一些使用代理的基础知识大家都懂,可是就是我们在使用ip时控制了访问速度和次数、设置了UserAgent、Referer等一系列方式的情况下,发现爬虫工作还是会遇到各种不好的情况,导致爬虫工作总是不那么顺利的进行,无法高效的爬取大量数据,按时完成每天的工作任务,那么这些其他的问题出在哪里呢,有什么好的解决办法呢? 我们都知道每个网站反扒策略不一样,所以需要具体问题具体分析。不过只要我们做好了以下这些基本的事情,百爬虫的百分之60%的问题都解决了。 1 在使用代理的时候要选择质量好的,各方面性能参数都达标的代理。 2 设置好header信息,不仅仅是UserAgent、Referer这两个,还有很多其它的header值 3 处理好Cookie 4 如果通过header和cookie还不能爬到数据,那么可以考虑模拟浏览器采集,常见的技术是PhantomJS 5 使用了爬虫代采集数据返回200但是没返回数据,说明爬虫被反爬了 ,需要做更强的反爬策略。 验证代理使用过程如何返回200,这里我们实际示例给大家分享下。 #! -- encoding:utf-8 -- import requestsimport random# 要访问的目标页面targetUrl = "http://httpbin.org/ip"# 要访问的目标HTTPS页面# targetUrl = "https://httpbin.org/ip"# 代理服务器(产品官网 www.16yun.cn)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,}# 设置IP切换头tunnel = random.randint(1,10000)headers = {"Proxy-Tunnel": str(tunnel)}resp = requests.get(targetUrl, proxies=proxies, headers=headers)print resp.status_codeprint resp.text我们可以把示例里面的目标网站换成我们需要访问的网站就可以进行测试了。
|