python爬虫要想按照计划开展,那么不仅程序代码要设置好,而且还得要代理IP的配合来抓取。以下黑洞代理整理爬虫时需要注意的一些小技巧,分享给大家:
1、连接池:
opener.open和urllib2.urlopen一样,都会新建一个http请求。通常情况下这不是什么问题,因为线性环境下,一秒钟可能也就新生成一个请求;然而在多线程环境下,每秒钟可以是几十上百个请求,这么干只要几分钟,正常的有理智的服务器一定会封禁你的。
然而在正常的html请求时,保持同时和服务器几十个连接又是很正常的一件事,所以完全可以手动维护一个HttpConnection的池,然后每次抓取时从连接池里面选连接进行连接即可。
这里有一个取巧的方法,就是利用squid做代理服务器来进行抓取,则squid会自动为你维护连接池,还附带数据缓存功能,而且squid本来就是我每个服务器上面必装的东东,何必再自找麻烦写连接池呢。
2、设定线程的栈大小
栈大小的设定将非常显著地影响python的内存占用,python多线程不设置这个值会导致程序占用大量内存,这对openvz的vps来说非常致命。stack_size必须大于32768,实际上应该总要32768*2以上
from threading import stack_size stack_size(32768*16)
3、设置失败后自动重试
def get(self,req,retries=3): try: response = self.opener.open(req) data = response.read() except Exception , what: print what,req if retries>0: return self.get(req,retries-1) else: print ‘GET Failed’,req return ” return data
4、设置超时
import socket socket.setdefaulttimeout(10) #设置10秒后连接超时
5、登陆
登陆更加简化了,首先build_opener中要加入cookie支持,参考“总结”一文;如要登陆VeryCD,给Fetcher新增一个空方法login,并在init()中调用,然后继承Fetcher类并override login方法:
def login(self,username,password): import urllib data=urllib.urlencode({‘username’:username, ‘password’:password, ‘continue’:’http://www.verycd.com/’, ‘login_submit’:u’登录’.encode(‘utf-8’), ‘save_cookie’:1,}) url = ‘http://www.verycd.com/signin’ self.opener.open(url,data).read()
于是在Fetcher初始化时便会自动登录VeryCD网站。
网络上虽然有很多爬虫的代码在流传,但是我们要懂得相关的知识才能够将这些代码来进行套用到自己的程序上。
相关文章内容简介
1 用Python爬虫使用技巧汇总(下)
python爬虫要想按照计划开展,那么不仅程序代码要设置好,而且还得要代理IP的配合来抓取。以下黑洞代理整理爬虫时需要注意的一些小技巧,分享给大家: 1、连接池: opener.open和urllib2.urlopen一样,都会新建一个http请求。通常情况下这不是什么问题,因为线性环境下,一秒钟可能也就新生成一个请求;然而在多线程环境下,每秒钟可以是几十上百... [阅读全文]
最新标签
推荐阅读
07
2019-11
正向代理、反向代理的对比
代理服务器可以分为正向代理、反向代理,使用的时候,大家可能感受不出来具体有什么不同。但是这两种其实存在不少差异,使用场景也不一样。
31
2019-10
Urllib库怎么使用?
用pyhton来进行爬虫是很多爬虫工作者的选择,大数据在各行各业都发挥着作用,企业也对数据分析给予更多的关注,黑洞代理今天给大家介绍Urllib库的使用。
31
2019-10
网络爬虫为什么会出现乱码?
代理IP让爬虫变得更加方便,降低了准入门槛,让很多人也开始学习如何编写爬虫程序。在爬虫的时候,会出现很多情况,黑洞代理跟大家分享当你的爬虫出现乱码如何解决。
31
2019-10
爬虫要怎么设计运行?
互联网时代,网络爬虫是常规操作了,比较常见的就有像搜索引擎蜘蛛,它通过每天抓取不同网站的信息,当用户进行搜索的时候,才能够进行返回有效信息。黑洞代理下面为大家介绍爬虫要怎
热门文章
在线咨询
客户经理
公众号
关注公众号,免费领试用
大客户