美文网首页
百度百科爬虫

百度百科爬虫

作者: 温小八 | 来源:发表于2018-11-20 20:35 被阅读0次

    本次爬取的是百度百科网络爬虫词条以及相关的标题、摘要和链接等信息

    一、运行流程

    爬虫框架的动态运行流程如下:


    运行流程

    其中,
    爬虫调度端主要负责统筹其他四个模块的协调工作;
    URL管理器主要负责管理URL链接,维护已经爬取的URL集合和未爬取的URL集合,提供获取新URL链接的接口;
    网页下载器则根据提供到的URL下载网页,并提供下载成功的网页数据;
    网页解析器根据提供的网页数据,解析新的URL链接和词条标题、摘要,返回相关数据给调度端;
    数据存储器通过mongo数据库的形式保存给到的数据;

    二、具体代码介绍

    1、UrlManager即URL管理器

        def has_new_url(self):
            return len(self.new_urls)
    
        def get_new_url(self):
            if(self.has_new_url()):
                new_url = self.new_urls.pop()
                self.old_urls.add(new_url)
                return new_url
            return None
    
        def add_new_url(self, url):
            if url is None:
                return
            if url not in self.new_urls and url not in self.old_urls:
                self.new_urls.add(url)
    

    has_new_url() 判断是否还有未爬取的URL集合,调度器会根据该函数判断是否要继续进行爬虫操作,未爬取的URL集合为空的时候,爬虫会自动停止;
    get_new_url() 从未爬取的URL集合中获取一个URL,并将其从未爬取的URL集合中删除,添加到已爬取的集合中,调度器会让下载器根据该URL下载网页数据并进行数据的爬取和保存;
    add_new_url() 添加到未爬取的URL集合时,必须判断是否有重合的URL,以免重复爬虫了。
    2、HtmlDownloader为网页下载器

        def download(self, url):
            if url is None:
                return None
            headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'}
            r = requests.get(url=url, headers=headers)
            if r.status_code == 200:
                r.encoding = 'utf-8'
                return r.text
            return None
    

    注意r.encoding,因为我是在window下编码的,下载的网页数据中,中文是乱码显示的,添加了r.encoding后中文就正常显示了,参考链接:https://jingyan.baidu.com/article/2c8c281dbb969d0008252a80.html
    3、HtmlParser是网页解析器
    (1)新的URL集合
    links = html.find_all('a', href=re.compile(r'/item/'))
    匹配的新的URL如下:
    只要链接中包含item,都添加到新的未爬取的URL集合中

    URL匹配
    (2)获取摘要和词条标题
        def _get_new_data(self, page_url, html):
            data={}
            # 获取词语的简介内容
            data['summary'] = (html.select('.lemma-summary')[0].get_text()).strip()
            data['url'] = page_url
            # 词语
            data['title'] = html.select('dd h1')[0].get_text()
            return data
    
    解析的字段

    三、运行结果

    mongo 数据库保存每个词条的标题、摘要和百度链接


    运行结果

    百度百科爬虫代码

    相关文章

      网友评论

          本文标题:百度百科爬虫

          本文链接:https://www.haomeiwen.com/subject/wznxqqtx.html