每日新闻 v1.2
- 系统软件
- 15.47MB
- v1.2
- 1949
- 暂未评级
- 2023-11-17 12:59
平时喜欢浏览新闻资讯的朋友如果想快速查看网页中的新闻内容,可以通过小编带来的这款每日新闻爬取软件来实现采集的操作,这是一个由python语言编写的爬虫工具,能够帮助用户轻松获取新闻网站中的数据,包括题目、内容、url等等,操作很简单,让用户直观地看到每天的新闻。
1 新闻源列表
本文要实现的异步爬虫是一个定向抓取新闻网站的爬虫,所以就需要管理一个定向源列表,这个源列表记录了很多我们想要抓取的新闻网站的url,这些url指向的网页叫做hub网页,它们有如下特点:
它们是网站首页、频道首页、最新列表等等;
它们包含非常多的新闻页面的链接;
它们经常被网站更新,以包含最新的新闻链接;
它们不是包含新闻内容的新闻页面;
Hub网页就是爬虫抓取的起点,爬虫从中提取新闻页面的链接再进行抓取。Hub网址可以保存在MySQL数据库中,运维可以随时添加、删除这个列表;爬虫定时读取这个列表来更新定向抓取的任务。这就需要爬虫中有一个循环来定时读取hub网址。
2 网址池
异步爬虫的所有流程不能单单用一个循环来完成,它是多个循环(至少两个)相互作用共同完成的。它们相互作用的桥梁就是“网址池”(用asyncio.Queue来实现)。
这个网址池就是我们比较熟悉的“生产者-消费者”模式。
一方面,hub网址隔段时间就要进入网址池,爬虫从网页提取到的新闻链接也有进入到网址池,这是生产网址的过程;
另一方面,爬虫要从网址池中取出网址进行下载,这个过程是消费过程;
两个过程相互配合,就有url不断的进进出出网址池。
3 数据库
这里面用到了两个数据库:MySQL和Leveldb。前者用于保存hub网址、下载的网页;后者用于存储所有url的状态(是否抓取成功)。
从网页提取到的很多链接可能已经被抓取过了,就不必再进行抓取,所以他们在进入网址池前就要被检查一下,通过leveldb可以快速查看其状态。
3. 异步爬虫的实现细节
前面的爬虫流程中提到两个循环:
循环一:定时更新hub网站列表
async defloop_get_urls(self,):print('loop_get_urls() start')while 1:
await self.get_urls()#从MySQL读取hub列表并将hub url放入queue
await asyncio.sleep(50)
循环二: 抓取网页的循环
async defloop_crawl(self,):print('loop_crawl() start')
last_rating_time=time.time()
asyncio.ensure_future(self.loop_get_urls())
counter=0while 1:
item=await self.queue.get()
url, ishub=item
self._workers+= 1counter+= 1asyncio.ensure_future(self.process(url, ishub))
span= time.time() -last_rating_timeif span > 3:
rate= counter /spanprint(' loop_crawl2() rate:%s, counter: %s, workers: %s' % (round(rate, 2), counter, self._workers))
last_rating_time=time.time()
counter=0if self._workers >self.workers_max:print('====== got workers_max, sleep 3 sec to next worker =====')
await asyncio.sleep(3)
软件具备了强大的新闻网站爬取功能,可以用来采集新闻数据,直接一键将网页中的内容爬取出来,方便用户更好地查看每天的新闻资讯,免费绿色无广告。
上文就是小编为您带来的每日新闻(爬取新闻)了,更多精彩软件请多多关注软件站。
本站所有关于【每日新闻 v1.2】的资源均是网友上传、开发商投稿、网络采集而来,本站不对任何资源负法律责任,所有资源请在下载后24小时内删除。
如侵犯了您的版权、商标等,请立刻联系我们并具体说明情况后,本站将尽快处理删除。
本文转载自互联网,如有侵权,联系删除。
暂无记录