打开网易新闻 查看精彩图片

昨天没有完整的爬取下来(请先阅读前一篇文章),实在是心有不甘。

一、遗留问题解决

打开网易新闻 查看精彩图片

再次在Jupyter Notebook里尝试,你看到了,爬取几乎成功,但是我犯了一个错误,列表索引多了一个(90);最后的输出(前45章)是之前想尝试分两部分爬取,但是也失败了,没改过来,不要介意。

打开网易新闻 查看精彩图片

把try…except语句拿出来,也是无用,每次不是子初,就是子正,就停滞了。

打开网易新闻 查看精彩图片

打开Anaconda里的Spyder,把代码封装成两个函数,一个获取章节名称和链接地址get_url()。

打开网易新闻 查看精彩图片

一个获取章节内容get_novel();每获取5个页面内容休息sleep 5秒种。

打开网易新闻 查看精彩图片

终于耗时6分多钟,成功完成了整个小说内容的爬取,休息时间占了近四分之一的时间 5秒*18次=90 秒;每个页面均值3.24秒。

打开网易新闻 查看精彩图片

我以为是休息间隔的问题,又回到了Jupyter Notebook中,重新设置为每获取5个页面内容休息5秒种,再次运行,可是依然到子正就熄火了。我可以认为,spyder更喜欢爬虫吗?上图中括号里没有数字(运行过)也没有星号(正在运行),表示未运行过,我只是留个证据,实在是不想看宕机了。

打开网易新闻 查看精彩图片

在右边控制台输入,昨天在Jupyter Notebook中最后的两行代码,只保留章节名称title和正文内容content,导出为文本文件to_csv时不要列名header和索引号index。

打开网易新闻 查看精彩图片

如果不设置,就会成上面那个样子。

二、新的小问题

打开网易新闻 查看精彩图片

双击右上角的变量浏览窗口时,发现第十九章 寅正 · 2的正文内容全是空白。

打开网易新闻 查看精彩图片

打开导出的文本文件,看到这一章只有一小段。

打开网易新闻 查看精彩图片

刚才用Spyder的时候,我也导出了一个csv文件,为了保留数据结构;这里重新读取read_csv进来。

打开网易新闻 查看精彩图片

输出新的DataFrame后,发现多了一列 Unnamed:0,和索引列是一样的,其实它就是原来的索引列。

打开网易新闻 查看精彩图片

删除这一列,就和昨天得到的数据结构一样了。

打开网易新闻 查看精彩图片

输出有问题的章节[70]内容content,前面是全角的空白字符\u3000和不间断空白符\xa0,只有少许的正文内容;输出有问题的章节链接地址url。

打开网易新闻 查看精彩图片

把链接地址用浏览器打开,得到正文的路径表达式。

打开网易新闻 查看精彩图片

输出后发现,它和其他章节不同的地方,是开头有两个(行)无用的字符。

打开网易新闻 查看精彩图片

改变for循环的起始点为2,得到了大部分的正文内容。

打开网易新闻 查看精彩图片

还记得原来得到的少部分正文内容吗?

打开网易新闻 查看精彩图片

查看原网页,就是从这分开的。

打开网易新闻 查看精彩图片

右键检查,可以看到,中间有三个换行符<br>,使后面的错位了。

打开网易新闻 查看精彩图片

创建两个字符串变量,把刚才用print输出的字符串连接+起来;c701+= i 等同于 c701 = c701 + i。

打开网易新闻 查看精彩图片

得到的前半部分,有很多的全角的空白字符\u3000和不间断空白符\xa0。

打开网易新闻 查看精彩图片

得到的后半部分也是类似。

打开网易新闻 查看精彩图片

用字符串替换函数replace把这两种字符替换成无''。

打开网易新闻 查看精彩图片

后半部分也是如此。

打开网易新闻 查看精彩图片

把替换后的字符串赋给两个新的字符串变量

打开网易新闻 查看精彩图片

连接起来,赋为最开始读取csv文件中,列名为content,索引号为70的值。

打开网易新闻 查看精彩图片

提取章节名称和正文内容,导出为文本文件,记得把列名和索引去掉。

打开网易新闻 查看精彩图片

修复好之后的文本内容截图。

三、格式还原

其实,还是有很多的不完美:比如,不能像网页显示的格式那样,每一段换行;这么稠,再好的文章也没有人看了。

打开网易新闻 查看精彩图片

尝试着用替换函数,把中文的句号(。)替换成句号加上换行符(。\n)。

打开网易新闻 查看精彩图片

结果不是很理想,换个思路。

打开网易新闻 查看精彩图片

在获取每段正文内容的地方添加两个换行符(添加一个,中间没有空行)。

打开网易新闻 查看精彩图片

基本上一致了,但在划分前后两部分的地方,中间有大段空白,超过一屏,我就不展示了。

结尾

这里仅对ca12sc_txt['content'][70]做了尝试,其他章节未实践,也许还有未知的问题等着我们呢,有兴趣的同学可以动手试下。