[Python] 实现网络爬虫
2014-03-18 10:56
671 查看
1、什么是网络爬虫
网络爬虫是现代搜索引擎技术的一种非常核心、基础的技术,网络就好比是一张蜘蛛网,网络爬虫就像是一只蜘蛛,在网络间‘爬来爬去’,搜索有用的信息。2、抓取代理服务器的网络爬虫
本文介绍用python实现抓取代理服务器的网络爬虫,主要步骤是:1)利用urllib2获取提供代理服务的网页信息(本文以http://www.cnproxy.com/proxy1.html为例)
2)利用正则表达式获取代理ip信息
3)利用多线程技术验证代理ip的有效性
1)、抓取代理ip列表
[python]
view plaincopyprint?
def get_proxy_list(): ''' http://www.cnproxy.com/proxy1.html http://www.cnproxy.com/proxy2.html http://www.cnproxy.com/proxy3.html ''' portdicts = {'z':"3",'m':"4",'a':"2",'l':"9",'f':"0",'b':"5",'i':"7",'w':"6",'x':"8",'c':"1"} proxylist = [] p=re.compile(r'''<tr><td>(.+?)<SCRIPT type=text/javascript>document.write\(":"\+(.+?)\)</SCRIPT></td><td>(.+?)</td><td>.+?</td><td>(.+?)</td></tr>''') for i in range(1,4): target = r'http://www.cnproxy.com/proxy%d.html' %i req = urllib2.urlopen(target) result = req.read() match = p.findall(result) for row in match: ip = row[0] port =row[1] port = map(lambda x:portdicts[x],port.split('+')) port = ''.join(port) agent = row[2] addr = row[3].decode("cp936").encode("utf-8") proxylist.append([ip,port,agent,addr]) return proxylist
首先利用urllib2模块获取网页信息,然后利用re模块匹配代理服务器信息,把所有抓取的代理服务器信息存入proxylist里,并返回。
2)、利用多线程验证代理服务器的有效性
[python]view plaincopyprint?
class ProxyCheck(threading.Thread): def __init__(self,proxy): threading.Thread.__init__(self) self.proxy = proxy self.timeout = 5 self.test_url ="http://www.baidu.com/" self.test_str = "030173" def run(self): global checkedProxyList cookies = urllib2.HTTPCookieProcessor() proxy_handler = urllib2.ProxyHandler({"http" : r'http://%s:%s' %(proxy[0],proxy[1])}) opener = urllib2.build_opener(cookies,proxy_handler) opener.addheaders = [('User-agent', 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3')] urllib2.install_opener(opener) starttime=time.time() try: req = urllib2.urlopen(self.test_url,timeout=self.timeout) result = req.read() timeused = time.time()-starttime pos = result.find(self.test_str) if pos > -1: checkedProxyList.append((proxy[0],proxy[1],proxy[2],proxy[3],timeused)) print "%s:%s\t%s\t%s\t%s\n"%(proxy[0],proxy[1],proxy[2],proxy[3],timeused) except Exception,e: print e.message我们通过代理连接百度网站,验证代理是否有效,一旦验证该代理有效,就打印出该代理的信息。
3)、main函数
[python]view plaincopyprint?
if __name__ == '__main__':
proxylist = get_proxy_list()
checkedProxyList=[]
for proxy in proxylist:
t = ProxyCheck(proxy)
t.start()
相关文章推荐
- Python--通过XPath实现网络爬虫
- python3实现网络爬虫(3)--BeautifulSoup使用(2)
- Python实现网络爬虫
- 异步网络爬虫的Python实现(3)
- Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
- 用Python实现网络爬虫
- 使用python爬虫实现网络股票信息爬取的demo
- python3实现网络爬虫(4)--BeautifulSoup使用(3)
- Python:入门到实现网络爬虫 Day4 --正则表达式
- python3.6 urllib.request库实现简单的网络爬虫、下载图片
- python使用rabbitmq实现网络爬虫示例
- python网络爬虫——基本概念及代码实现1
- python3实现网络爬虫(1)--urlopen抓取网页的html
- 网络爬虫之网站图片爬取-python实现
- [Python] 实现网络爬虫
- Python 实现网络爬虫小程序
- 网络资源搜索爬虫(python 3.4.1实现)
- python实现网络爬虫
- python3实现网络爬虫(5)--模拟浏览器抓取网页
- Python 实现网络爬虫小程序