python多线程和协程的区别,python多进程和多线程协程
最近想找几本电子书,就随便翻了翻。然后,我找到了一个叫周度的网站。网站很好,简单清爽,书很多。另外,即使打开百度的网盘,也可以直接下载,更新速度也很不错。所以,我试着爬。就研究这篇文章吧。这么好的分享网站尽量不要抓取。影响人的访问速度不好。我是http://www.ireadweek.com/.想要数据的人可以在我的博客下评论。QQ,邮箱,什么都行。
这个网站的页面逻辑非常简单。打开书的详细页面,如下图。我们只需要循环生成这些页面的链接,然后向上爬。为了速度,我用多线程。请试一试。如果你想要攀岩后的数据,在本博客下评论。请不要破坏别人的服务器。
33558 week.com/index.PHP/bookinfo/11393.html
33558 week.com/index.PHP/bookinfo/11.html。
在线电子书多线程抓取代码
代码非常简单。您可以使用前面的教程作为基础,用更少的代码实现完整的功能。将最后收集的内容写入csv文件。(csv是什么?百度一下就知道了。)这段代码是一个IO密集型操作。在aiohttp模块中创建。
第一步
连接URL并打开线程。
导入请求
#部署协作模块
进口异步
进口aiohttp
headers={ user-agent : Mozilla/5.0(windows nt 10.0;WOW64 ) appleWebKit/537.36(khtml,像壁虎一样)chrome/68 . 0 . 3440 . 106 safari/537.36 ,
主持人: www.ireadweek.com ,
接受: text /XML,APP/XHTML XML,APP/XML。q=0.9,image/webp,image/apng,*/*;q=0.8}
asyncdefget_content(URL):
Print (in操作:(})。格式)(网址)))
#创建一个会话来获取数据
与aiohttp异步。ClientSession()作为会话:
asyncwithsession.get(URL,headers=headers,timeout=3) as res:
如果资源状态==200:
Source=awaitres.text(#等待文本
是,打印(来源)
if __name__==__main__ :
URL _ format= http://www . iread week.com/index.PHP/bookinfo/{ }。 html
full _ URL list=[URL _ format . format(I)for iinrange(1,11394 ) ] # 11394
loop=asyncio.get_event_loop(
tasks=[获取完整url列表中URL的内容(URL)]
results=loop . run _ until _ complete(异步io.wait)任务) )
上面的代码可以同时打开N个以上的线程,但是很容易搞垮其他服务器,所以并发的数量一定要有限制。下面的代码试图将它放在自己指定的位置。
SEMA=asyncio.semaphore(5)).
#注意不要让爬虫一次提出太多请求。
asyncdefx_get_source(URL):
等待Ema:
aitget_content(URL)).
第二步
处理捕获的web源代码并提取所需的元素。添加了使用lxml提取数据的方法。
默认同步内容(树) :
标题=树。XPath((/div ) ) class=杭航-za-title ) )0)。文本
如果第#页没有信息,请直接返回。
如果title==“”:
返回
否则:
尝试:
description=tree . XPath((/div))class=杭航-舒-内容-字体))
作者=描述[0]。XPath (p [1]/text)) 0)。替换(作者:, )ifdescription)。XPath))
Cate=描述[0]。xpath (p [2]/text)) 0)。替换))类别:“,”))ifdescription)。XPath)
豆瓣=描述[0]。xpath (p [3]/text)) 0)。替换))豆瓣评分:, ))ifdescription )0)。路径语言
#该部分内容不清楚,所以未记录
# des=描述[0]。XPath(p(5)/text))0)if description)。XPath(p(5)/text ) ) 0
下载=树。XPath((/a ) @class=downloads ))
例外情况为e:
是,打印(标题)
返回
ls=[
标题,作者,美食,豆瓣,下载[0]。get(href ))))).
]
返回LS
第三步
数据格式化后,保存为csv文件,工作完成!
是,打印(数据)
withopen(Hang。CSV , a ,编码=utf-8 )作为fw:
是writer=CSV.writer(fw)
Writer.write row (data))。
打印(插入成功!)
Python资源分享qun 784758214包含安装包、pdf和学习视频。这是一个Python学生的聚会,欢迎所有零学位和高级的学生。
在线电子书多线程抓取-运行代码并显示结果。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。