首页 > 编程知识 正文

爬虫用多线程还是多协程,python协程与多线程比较

时间:2023-05-04 22:08:34 阅读:114131 作者:1385

最近,我想找几本电子书,所以翻了一下。 然后,我找到了一个叫周读的网站。 网站很好,简单又清爽,有很多书。 另外,即使打开百度的网盘也可以直接下载,更新速度也很好。 于是,我试着爬了一下。 这篇文章学习一下就好了。 这样好的共享网站,尽量不要爬。 影响人的访问速度就不好了。 是http://www.ireadweek.com/。 想要数据的人,可以在我的博客下评论。 QQ,邮箱地址,什么都可以。

这个网站的页面在逻辑上非常简单。 翻开书籍的详细页面,如下所示。 我们只需要循环生成指向这些页面的链接,然后爬上去就可以了。 为了速度,是我采用的多线程。 请试一下。 如果你想要攀登后的数据,在本博客下评论。 请不要破坏别人的服务器。

33558 www.iread week.com/index.PHP/bookinfo/11393.html

33558 www.iread week.com/index.PHP/bookinfo/11.html

.

行网电子书多线程爬网-代码

代码非常简单。 您可以使用前面的教程作为基础,通过较少的代码实现完整的功能。 将最后收集的内容写入csv文件。 (什么是csv,百度看看就知道了。 )此代码是IO密集操作。 在aiohttp模块中创建。

第一步

连接URL,打开线程。

导入请求

#部署协作模块

import asyncio

import aiohttp

headers={ ' user-agent ' : ' Mozilla/5.0 (windows nt 10.0; WOW64 ) appleWebKit/537.36(khtml,like Gecko ) chrome/68.0.3440.106 safari/537.36 ',

' Host': 'www.ireadweek.com ',

' accept ' : '文本/XML,APP/XHTML XML,APP/XML; q=0.9,image/webp,image/apng,*/*; q=0.8'}

asyncdefget_content(URL ) :

print ('正在操作:(}.format ) (URL ) ) )

#创建用于获取数据的会话

async with aiohttp.ClientSession () as session:

asyncwithsession.get(URL,headers=headers,timeout=3) as res:

if res.status==200:

source=awaitres.text(#等待获取文本

是打印(source )

if __name__=='__main__':

URL _ format=' http://www.iread week.com/index.PHP/bookinfo/{ }.html '

full _ urllist=[ URL _ format.format (I ) foriinrange (1,11394 ) ] # 11394

loop=asyncio.get_event_loop (

tasks=[get_content(URL ) for url in full_urllist]

results=loop.run _ until _ complete (async io.wait ) tasks ) )

上面的代码可以同时打开n个以上的线程,但这样做容易使其他服务器宕机,因此必须限制并发次数。 下面的代码试着放置在自己指定的位置。

SEMA=asyncio.semaphore(5) )。

#注意不要让爬行动物一次的请求次数过多

asyncdefx_get_source(URL ) :

等待Ema :

aitget_content(URL ) ) )。

第二步

处理捕获的web源代码并提取所需元素。 添加了使用lxml进行数据提取的方法。

defasync_content(tree ) :

title=tree.XPath((/div ) ) class='hanghang-za-title ' ) )0).text

如果第#页没有信息,请直接返回

if title=='':

返回

else:

try:

描述=tree.XPath ((/div ) ) class=' hanghang-Shu-content-font ' ) )

author=description [0].XPath (p [1]/text ) )0).replace ('作者:','') ifdescription).XPath ) )

cate=description [0].XPath (p [2]/text ) )0).replace ) )分类:','') ) ifdescription).XPath )

douban=description [0].XPath (p [3]/text ) )0).replace ) )豆瓣评分:',''') ) ifdescription )0).XPath

#这个部分的内容不明确,所以不记录

#des=description[0].XPath(p(5)/text ) )0) ifdescription).XPath(p(5)/text ) ) 0

download=tree.XPath((/a ) @class='downloads ' ) )

except Exception as e:

是打印(title )

返回

ls=[

title,author,cate,douban,download[0].get('href ' ) ) ) ) )。

]

返回LS

第三步

格式化数据后,保存在csv文件中,结束工作!

是打印(数据)

withopen('Hang.CSV ',' a ',encoding='utf-8 ' ) as fw:

是writer=CSV.writer(fw )

writer.write row (数据) )。

print ('插入成功!' )

Python资源共享qun 784758214包含安装软件包、PDF和学习视频。 这里是Python学员的聚会,所有的零度基点、高级都欢迎

行网电子书多线程爬网-运行代码并显示结果

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。