您的位置: 首页 > 新闻资讯 > 正文

用Python爬虫使用技巧汇总(下)

发布时间:2019-10-25 15:50:01 来源:

python爬虫要想按照计划开展,那么不仅程序代码要设置好,而且还得要代理IP的配合来抓取。以下黑洞代理整理爬虫时需要注意的一些小技巧,分享给大家:


用Python爬虫使用技巧汇总(下)


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请求。通常情况下这不是什么问题,因为线性环境下,一秒钟可能也就新生成一个请求;然而在多线程环境下,每秒钟可以是几十上百... [阅读全文]

最新标签