软件介绍
每日新闻软件简介
平时喜欢浏览新闻资讯的朋友如果想快速查看网页中的新闻内容,可以通过小编带来的这款每日新闻爬取软件来实现采集的操作,这是一个由python语言编写的爬虫工具,能够帮助用户轻松获取新闻网站中的数据,包括题目、内容、url等等,操作很简单,让用户直观地看到每天的新闻。
每日新闻软件亮点
1 新闻源列表
本文要实现的异步爬虫是一个定向抓取新闻网站的爬虫,所以就需要管理一个定向源列表,这个源列表记录了很多我们想要抓取的新闻网站的url,这些url指向的网页叫做hub网页,它们有如下特点
它们是网站首页、频道首页、最新列表等等;
它们包含非常多的新闻页面的链接;
它们经常被网站更新,以包含最新的新闻链接;
它们不是包含新闻内容的新闻页面;
Hub网页就是爬虫抓取的起点,爬虫从中提取新闻页面的链接再进行抓取。Hub网址可以保存在MySQL数据库中,运维可以随时添加、删除这个列表;爬虫定时读取这个列表来更新定向抓取的任务。这就需要爬虫中有一个循环来定时读取hub网址。
2 网址池
异步爬虫的所有流程不能单单用一个循环来完成,它是多个循环(至少两个)相互作用共同完成的。它们相互作用的桥梁就是“网址池”(用asyncio.Queue来实现)。
这个网址池就是我们比较熟悉的“生产者-消费者”模式。
一方面,hub网址隔段时间就要进入网址池,爬虫从网页提取到的新闻链接也有进入到网址池,这是生产网址的过程;
另一方面,爬虫要从网址池中取出网址进行下载,这个过程是消费过程;
两个过程相互配合,就有url不断的进进出出网址池。
3 数据库
这里面用到了两个数据库:MySQL和Leveldb。前者用于保存hub网址、下载的网页;后者用于存储所有url的状态(是否抓取成功)。
从网页提取到的很多链接可能已经被抓取过了,就不必再进行抓取,所以他们在进入网址池前就要被检查一下,通过leveldb可以快速查看其状态。
异步爬虫的实现细节,前面的爬虫流程中提到两个循环,循环一:定时更新hub网站列表,async defloop_get_urls(self,):print('loop_get_urls() start')while,await self.get_urls()#从MySQL读取hub列表并将hub url放入queue,await asyncio.sleep(5,循环二: 抓取网页的循环,async defloop_crawl(self,):print('loop_crawl() start')last_rating_time=time.time()asyncio.ensure_future(self.loop_get_urls())counter=0while,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 >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(
每日新闻软件特色
软件具备了强大的新闻网站爬取功能,可以用来采集新闻数据,直接一键将网页中的内容爬取出来,方便用户更好地查看每天的新闻资讯,免费绿色无广告。
上文就是小编为您带来的每日新闻(爬取新闻)了,更多精彩软件请多多关注本站。
同类推荐
-
哔哩哔哩 查看