前面写了一篇python学习之路(七):牛刀小试,爬取网络图片下载到电脑。这篇只是牛刀小试。用python内置模块加正则表达式爬取图片,这样效率并不高。于是了解到有一个python的第三方模块BeautifulSoup很好用,于是就去了解了一下。最近正在看南派三叔的《世界》,所以拿这个来练练手。

小说网站:http://www.zanghaihua.org/shijie/

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

思路:

1、了解网站HTML结构

2、用BeautifulSoup解析获取小说目录,和每一个章节的url

3、循环每个章节url,并用BeautifulSoup解析获取每个章节的正文

4、循环追加每个章节的内容写到本地TXT文件

实现:

安装BeautifulSoup模块

命令行输入:pip install beautifulsoup4开始安装

命令行输入:pip install lxml安装第三方解析器

不太明白如何安装的请阅读:python学习之路(五):第三方模块的安装与调用

beautifulsoup4有几个主要的解析器,上面的lxml是其中一个。

其他的如下:

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

beautifulsoup4用法太多,而且这也是很有名的一个HTML解析模块,网上对它的用法有一大堆。所以这里不再过多介绍它。

官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

引入模块

因为要获取网页源代码所以这里也引入了内置模块urllib

写一个获取网页源码的函数

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

写一个保存文字到本地的函数

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

参数filename为章节名称,contents为章节正文内容。

fh = open('D:\python\世界.txt', 'a')

这一句是设置文件保存路径,后面的a表示再次写入字符串的话就在原有内容后面追加。

fh.write(filename+'\n'+contents+'\n')

这句是把内容写入文件。“\n”是换行符。这里的意思是章节标题写完后换一行写正文,正文写完后,再换一行。下一章节写入标题的时候就是从另一行开始写了。

获取文档对象

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

调用getHtml函数,传入小说目录网页的url,得到网页源代码,把源代码传入BeautifulSoup 的构造方法,得到一个文档的对象。后面的'lxml'表示采用lxml的解析器。采用BeautifulSoup 的内置解析器,接写“html.parser”。但是我用的效果好像并没有lxml好,所以这里采用lxml。

了解目录网页结构,用BeautifulSoup解析获取目录列表

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

从网页结构可以看出。目录列表是在class为“booklist clearfix” 的div里面。章节标题为div下面的a标签文字。章节正文为a标签的href属性。

先用BeautifulSoup的find_all根据div的calss获取一个对象。

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

上面的list是div的对象并不是章节列表。章节列表是在div下面的a标签,所以用

chapter=list[0].find_all('a')

来获取目录列表,因为find_all返回的是一个字典,但是在网页里面只有一个class为“booklist clearfix” 的div。所以这里直接取第一个下面的标签。

可以输出看看结果

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

循环读取a标签章节标题和url

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

获取章节纯文字为目录的子项item.text

获取章节url为读取a标签的href属性。在BeautifulSoup标签属性是一个字典所以用item['href']就可以取到了。

了解章节正文html结构,用BeautifulSoup解析获取正文内容

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

从上面分析网页结构可以看出。章节正文是在class为“bookcontent clearfix” 的div里面。直接获取里面的纯文字即可。

循环读取章节正文网页源代码

循环解析正文网页,获取正文内容

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

循环调用save函数保存内容到本地

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

完整代码

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

执行结果

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

本地目录也已经保存有了,26章共66k

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说

导入手机阅读器看看效果

python学习之路(10):爬虫进阶,使用python爬取自己喜欢的小说