使用Python爬取起点小说网全部文章

2019-11-14 16:17

  网络文学随互联网的崛起而崛起,在时间日益碎片化的今天,网络文学以其方便快捷的特点适应了人们的娱乐性需求,因而也快速成长一个巨大的市场。娱乐是人们的根本性需求,文化是这个过程中的附属品。要想知道人们关心的是什么?什么又在兴起,哪些题材又在逐渐没落,我们需要从整体去分析。

  因此这个爬虫也就应运而生,我们选取了目前国内最大的小说平台——起点网作为数据来源。本爬虫主要是为了爬取起点小说的基本信息(题目、作者、简介等),在写爬虫的过程中,我也碰到了一些有趣的反爬机制,这些小障碍我也会在本文中一并记录下来,希望能够给后来者一些帮助。

  主要采用MongoDB数据库,MongoDB数据库在处理这种快速读写的数据有着非常高的效率,该部分主要通过修改pipelines来实现:

  无论怎么看,起点网的反爬机制都是很业余的,我本来以为需要构建一个IP池,或者说限制住访问速度才能爬的下来;但这些都没有用到,基本上只要写完基本的Scrapy我们就能得到所需要的数据。

  但在爬取网站数据的时候,我遇到了相当多次访问连接失效的问题,不管是使用爬虫访问还是直接用浏览器访问,这种情况都不少,对此我认为起点网的后台代码也许写的真的很烂,但就是这么烂的代码支撑起了中国网络文学界的半壁江山。果然在业务确定、行业壁垒已经建立的情况下,只要代码能跑得动,就不需要大修。

  我们可以通过F12键打开控制台,在Elements中查看到这一反爬机制;此处我已经截图,我们可以看到:

  原本我以为是由于编码的问题导致的控制台查看出现了乱码,在后台我看到数字的编码为𘡁等,开始我尝试去搜索这是什么编码,走了很多弯路后发现这其实是一个映射。源码对应的字符部分其实表示的是某种字体的英文显示,如在截图中,该字体为KbUxwPAi;了解到这些,我们要做的就是构建起这个映射,然后解码出对应的数字,该部分的思路如下:

  因为起点小说网全部分类下面虽然有显示五万多页的作品,但一般爬虫抓到5000多页就会发现没有办法获取到有效数据了,也就是说全部分类下的5000页之后的数据基本都是摆设,对此我换了个思路想先抓取到一二级分类的所有内容之后在通过更换url中的page=?来更多的抓取数据。

  对比可以发现,page更换了位置,其实只要细心点就能绕过这个坑;解决这个小问题之后,之后的爬取就畅通无阻了。

  但因为网络链接的不稳定和代码不够健壮的问题,其实离爬取起点的全网数据还是有一定距离的,起点全网有112万本小说,我们最终爬取的小说数目为19万左右,除去其有一些小说一直没有展示出来,代码还是不够健壮。

  需要着重强调的部分我已经说的差不多了,剩下的诸如定义Items等都是Scrapy的基础,在这里就不过多的赘述,在写完代码之后我们可以直接运行

分享到:
相关阅读
文章评论 · 所有评论
评论请遵守当地法律法规
点击加载更多
© 2016-2018 12小时新闻网 http://www.12hnews.com/ 中国互联网举报中心
违法和不良信息举报:lobtom@163.com