rule 发表于 2017-4-29 09:42:53

[Python] 实现网络爬虫

1、什么是网络爬虫
  网络爬虫是现代搜索引擎技术的一种非常核心、基础的技术,网络就好比是一张蜘蛛网,网络爬虫就像是一只蜘蛛,在网络间‘爬来爬去’,搜索有用的信息。

2、抓取代理服务器的网络爬虫
  本文介绍用python实现抓取代理服务器的网络爬虫,主要步骤是:
  1)利用urllib2获取提供代理服务的网页信息(本文以http://www.cnproxy.com/proxy1.html为例)
  2)利用正则表达式获取代理ip信息
  3)利用多线程技术验证代理ip的有效性

1)、抓取代理ip列表

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
port =row
port = map(lambda x:portdicts,port.split('+'))
port = ''.join(port)
agent = row
addr = row.decode("cp936").encode("utf-8")
proxylist.append()
return proxylist


首先利用urllib2模块获取网页信息,然后利用re模块匹配代理服务器信息,把所有抓取的代理服务器信息存入proxylist里,并返回。
2)、利用多线程验证代理服务器的有效性

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,proxy)})
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,proxy,proxy,proxy,timeused))   
print "%s:%s\t%s\t%s\t%s\n"%(proxy,proxy,proxy,proxy,timeused)
except Exception,e:
print e.message      我们通过代理连接百度网站,验证代理是否有效,一旦验证该代理有效,就打印出该代理的信息。
3)、main函数

if __name__ == '__main__':
proxylist = get_proxy_list()
checkedProxyList=[]
for proxy in proxylist:
t = ProxyCheck(proxy)
t.start()
页: [1]
查看完整版本: [Python] 实现网络爬虫