python 多线程队列,python多线程爬取大量数据
这篇文章主要介绍了大蟒利用多线程队列技术爬取中介网互联网网站排行榜,文章基于大蟒的相关内容展开详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
目录
目标站点分析编码时间
目标站点分析
本次要抓取的目标站点为:中介网,这个网站提供了网站排行榜、互联网网站排行榜、中文网站排行榜等数据。
网站展示的样本数据量是 :58341。
采集页面地址为https://www.zhongjie.com/top/rank_all_1.html,
UI如下所示:
由于页面存在一个【尾页】超链接,所以直接通过该超链接获取累计页面即可。
其余页面遵循简单分页规则:
https://www.zhongjie.com/top/rank_all_1.html
https://www.zhongjie.com/top/rank_all_2.html
基于此,本次计算机编程语言爬虫的解决方案如下,页面请求使用要求库,页面解析使用lxml,多线程使用穿线模块,队列依旧采用长队模块。
编码时间
在正式编码前,先通过一张图将逻辑进行梳理。
本爬虫编写步骤文字描述如下:
预先请求第一页,解析出总页码;通过生产者不断获取域名详情页地址,添加到队列中;消费者函数从队列获取详情页地址,解析目标数据。
总页码的生成代码非常简单
def get_total_page():
# get_headers()函数,可参考开源代码分享数据
res=requests.get(
https://www。钟杰。com/top/rank _ all _ 1。 html ,headers=get_headers(),timeout=5)
element=etree .HTML(res.text)
last _ page=element。XPath(//a[@ class=叶巍]/@href)[0]
pattern=re.compile((\d))
page=pattern.search(last_page)
return int(page.group(1))
总页码生成完毕,就可以进行多线程相关编码,本案例未编写存储部分代码,留给你自行完成啦,
完整代码如下所示:
从队列导入队列
导入时间
导入线程
导入请求
从什么是导入诡异又阴森的树形灯
随机导入
进口是
def get_headers():
uas=[
Mozilla/5.0(兼容;baiduspider/2.0;http://www。百度一下。com/search/spider。html),
Mozilla/5.0(兼容;baiduspider-render/2.0;http://www。百度一下。com/search/spider。 html)
]
ua=随机选择
标题={
用户代理: ua
}
返回标题
def get_total_page():
res=requests.get(
https://www。钟杰。com/top/rank _ all _ 1。 html ,headers=get_headers(),timeout=5)
element=etree .HTML(res.text)
last _ page=element。XPath(//a[@ class=叶巍]/@href)[0]
pattern=re.compile((\d))
page=pattern.search(last_page)
return int(page.group(1))
# 生产者
定义生产者():
而True:
# 取一个分类身份
url=urls.get()
urls.task_done()
如果全球资源定位器(Uniform Resource Locator)不是:
破裂
res=requests.get(url=url,headers=get_headers(),timeout=5)
text=res.text
element=etree .HTML(文本)
链接=元素。XPath(//a[@ class= copyright _ title ]/@ href )
对于链接:中的我
等待列表网址。放( https://www。钟杰。com I)
# 消费者
定义消费者():
而True:
url=wait_list_urls.get()
wait_list_urls.task_done()
如果全球资源定位器(Uniform Resource Locator)不是:
破裂
res=requests.get(url=url,headers=get_headers(),timeout=5)
text=res.text
element=etree .HTML(文本)
# 数据提取,更多数据提取,可自行编写语言
标题=元素。XPath(//div[@ class= info-head-l ]/h1/text())
链接=元素。XPath(//div[@ class= info-head-l ]/p[1]/a/text())
描述=元素。XPath(//div[@ class= info-head-l ]/p[2]/text())
打印(标题、链接、描述)
if __name__==__main__:
# 初始化一个队列
urls=Queue(maxsize=0)
last_page=get_total_page()
对于范围(1,最后_第1页):中的p
网址。放(f https://www。钟杰。com/top/rank _ all _ { p } .html’)
wait_list_urls=Queue(maxsize=0)
#打开2个生产者线程
对于范围(1,3):内的p_in
p=螺纹。线程(目标=生产者)
开始()
#打开2个消费者线程
对于范围(1,2):内的p_in
p=螺纹。线程(目标=消费者)
开始()
关于python使用多线程队列技术抓取Internet的Internet网站列表的文章到此结束。关于python抓取网站列表的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。