前言
在上篇文章中,讲述了如何获取代理ip,当获取了足够多的代理ip之后,可以使用代理ip更高效的爬取网络信息,同时,当爬取大规模的数据时,利用多线程可以实现更快的爬取速度,现在总结一下如何在自己的爬虫中使用代理ip和多线程
代理ip的利用
上次爬取代理ip之后,发现这些ip信息有两种类型,分别是http和https,那么相对应的对于这两种不同类型的ip,应该分别做不同的处理.
详细代码如下,返回值为一字典:
def proxys():
url = "http://www.xicidaili.com/"
ips_list = get_ips(url) #获取代理ip的函数,返回值为一列表
proxy_ip = random.choice(ips_list) #在列表中随机的获取一代理ip
'''
如果ip信息为http开始,构建http类型的字典,反之,构建https类型的字典
'''
if proxy_ip.startswith('http'):
proxies = {'http':proxy_ip}
elif proxy_ip.startswith('https'):
proxies = {'https':proxy_ip}
return proxies
最后,再request.get函数中的使用如下:
wb_data = requests.get(url=pages_url,headers=headers,proxies=proxys())
多线程的利用
首先,导入多线程所需要的库
from multiprocessing import Pool
多线程的实现代码如下:
pool = Pool(6)
pool.map(get_all_links_from,channel_list)
pool.close() #关闭进程池(pool),使其不在接受新的任务。
pool.join() #主进程阻塞等待子进程的退出,join方法必须在close或terminate之后使用
在以上代码中,我们实例化了一个Pool类的对象,并为其分配了六个线程,
然后调用了map函数.
注意: map()函数有两个参数,第一个为多线程执行的函数,另一参数为一迭代器,在本例中,我们使用的是一列表类型的参数.
网友评论