美文网首页
WebScraper豆瓣

WebScraper豆瓣

作者: 晨潇凝暮 | 来源:发表于2018-04-28 20:19 被阅读186次

    豆瓣读书文件爬取

    可以说是很典型的经常被爬的豆瓣网站了,算的上是为人民服务的典范了。

    网页分析

    在网站爬取之前,首先要明确,需要爬取的内容是哪些,这个很重要。其次,需要搞清楚爬虫运行的思路,遵循什么样的原则,是单面爬取,还是网站循环爬取,还是内外链跳转爬取。

    本次,通过豆瓣读书评分9分以上的榜单来实现爬取。本次,我想要爬取的内容包括书名、评分、评分人数、以及其摘要信息(即作者、出版社、出版年)。

    正式创建

    通过F12打开开发者工具,打开WebScraper插件工具。单击create new sitemap栏下的Create sitemap创建一个新的站点地图。
    Sitemap name条目后面自定义一个名称,在Start URL栏后面粘贴豆瓣读书的网页地址。接着,就可以看到下图。

    create.png

    点击图中的Add new selector按键进入下图界面。

    Add selector.png

    Id一栏随意填写,Type类型根据前面描述的内容发现这是一个由多种不同Html元素所组成的混合型内容,因此需要选择Element,随后在Selector栏点击Select,点击我们想要爬取的主要区域块内容。全部设置完成后会看到下图所示内容。然后点击Done,即可完成初步设置,然后点击Save保存以上设置内容。

    selector.png

    此时,回到初始界面,可以看到下图所示内容,若看到的界面不一致,请重新检查以上步骤是否出错。

    first view.png

    目前为止,已经完成了基本的设置,即在这个新建的selector里面已经通过设置element元素,囊括了前面我们提到的信息,接下来就是将这些信息分块存储

    点击上图中的content行的任意区域,在界面中,继续点击Add new selector,然后重复上述步骤,需要注意的是,Id栏不要重复,Type栏目因为爬取的主要内容以文本为主,所以对应的需要改成Text。分层设置内容,对想要爬取的内容在该content栏下设置完毕。设置后,如图所示。

    abstract.png rank.png title.png totalnum.png trials.png

    打开selector graph可以看到以下图形。

    graph.png

    目前为止,可以回到content界面(就是只有一行内容的),点击Data preview,但是会发现一个很奇怪的问题,爬虫仅爬下了当前界面的内容。接下来就要对此问题进行探究了。

    网页循环爬取,获取所有的内容。通过分析豆瓣读书的url可以发现第一页的页面URL为https://www.douban.com/doulist/1264675/?start=0&sort=seq&sub_type=
    第二页的URL为https://www.douban.com/doulist/1264675/?start=25&sort=seq&sub_type=
    网址参数里只有start=后面的数值变化了,在总结中可以得出该数字是每页的第一本书的序号。所以只需要在sitemap中将Start URL重新设置即可。点击edit metadatastartURL中输入https://www.douban.com/doulist/1264675/?start=[0-475:25]&sort=seq&sub_type=,即可。
    start=后面的参数表示以25为等差的数列关系。到此,就可以开始爬取数据了。当然,为了防止爬取速度太快,被网站的反爬机制阻挡,可以适当的设置父节点的delay时长。

    扩展补充

    以上,就简单的介绍了关于如何爬取URL中有参数的网站,但是有些网站采取的是滑动向下刷新的内容,也有加载更多的内容。这些我们下节讨论。

    在此基础之上,再讲解一下如何不使用网站自带的URL变化去获取网站下一页的内容。

    网站的每一页内容都包含着某些信息,当我们想要获取整个网站的信息的时候,首先,需要有能力遍历网站的所有网页,其次才是搜集网页的内容。

    按照这种思路,在以上内容的基础上,进行修改。当然,将修改starturl部分的内容复原到只能单页爬取的状态。

    然后在content父节点的目录下创建一个新的selector,并将其进行命名,此处的type类型为link(即网页链接)。此时,我们就创建好了一个新的链接进行跳转。如下图所示。

    pagenext.png

    然后,我们需要对content这个selector下面的内容进行修改,将其父节点更改到刚刚新建的这个pagenext这个新建的节点上,这样就会形成一个围绕着网站下一页进行遍历的循环体。所以点击content的edit条目,在parent selector部分将父节点由_root更改为* _rootpagenext*两个。具体操作按住ctrl键然后点击项目即可完成。

    content.png

    此时,可以在selector graph里看到下图内容时,即意味着已经修改完成。

    selector graph.png

    到目前为止,已经完成了爬取豆瓣读书的所有设置,通过这个简单的例子,对该插件理解和运用也有了一个基本的了解。需要讲解的内容和思路也已经讲解完毕,而其他的内容设置则需要读者根据文档手册的内容,结合自己的需求去进行实际操作。

    另外,文末附上本次爬虫的爬取数据的部分截图。并共享上自己的sitemap,读者可以在插件中通过导入该sitemap直接调用本次案例使用的所有例子,直接进行爬取。

    dataview.png
    {"_id":"doubanread","startUrl":["https://www.douban.com/doulist/1264675/?start=1&sort=seq&sub_type="],"selectors":[{"id":"content","type":"SelectorElement","selector":"div.bd.doulist-subject","parentSelectors":["_root","pagenext"],"multiple":true,"delay":"1000"},{"id":"title","type":"SelectorText","selector":"div.title a","parentSelectors":["content"],"multiple":false,"regex":"","delay":0},{"id":"rank","type":"SelectorText","selector":"span.rating_nums","parentSelectors":["content"],"multiple":false,"regex":"","delay":0},{"id":"totalnum","type":"SelectorText","selector":"div.rating span:nth-of-type(3)","parentSelectors":["content"],"multiple":false,"regex":"[0-9]+","delay":0},{"id":"abstract","type":"SelectorText","selector":"div.abstract","parentSelectors":["content"],"multiple":false,"regex":"","delay":0},{"id":"pagenext","type":"SelectorLink","selector":"div.paginator > a","parentSelectors":["_root"],"multiple":true,"delay":0}]}
    #By PsySunG(此条不用复制)
    

    相关文章

      网友评论

          本文标题:WebScraper豆瓣

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