关于利用python爬虫爬取小说的实战例子

前言

最近对python爬虫很感兴趣,就花了一些时间来学习,学习了近一周的时间,终于在看了一些其他博客的大神写的教程之后,学会了利用beautifulsoup的方法爬取了一些网站的小说。在此分享我学习的成果。

  • 关于详细的python3爬虫的学习教程以及参考:学习教程
  • 在以下的文中主要介绍爬小说的技巧

爬取的过程

素材


技巧分析

在编写代码前应先在浏览器中(推荐Chrome,我用的Safari)查看在网页抓包中的相关的内容信息,一般查看其中的:

  • charset即其中的编码类型,在后面的程序中需要

  • 在文章开始阶段的前的那一小段html编码

如下图所示的(等下将要用到):

  • charset所示:

一般在最前头可以看到。


  • 主要的一小段html(即为div的标签,后面为相应的属性值,即一个html中有多个标签,每一个标签用不同的属性值来进行标记以表示不同的标签,从而在一个页面中可以有多个不同的内容展示出来)所示:

如上在文章的前边的那一小段的html代码


代码

  • 可先用相关的代码查看相关的网页字符属于那种编码类型
1
2
3
4
5
6
7
8
9
# 用beautifulsoup爬取小说的例子
# 可先将网页编码的字符先行得知
from urllib import request
import chardet
re=request.urlopen('http://www.biqukan.com/1_1094/5403177.html')
charset=chardet.detect(re.read())
print('we can see the cahrset about the html:',charset)

具体的学习可以参考这篇文章


  • 开始编写爬取相关内容的代码。将其中的URL地址以及相关的charset所属字符在以下的代码中修改一下均可达到在下方效果的显示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#开始爬取相关的内容
from urllib import request
from bs4 import BeautifulSoup
from urllib import error
try:
if __name__ == '__main__':
#相关的URL的输入以及代理
re=request.Request(url='http://www.biqukan.com/1_1094/5403177.html',headers={'User-Agent':'* Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30'})
#打开,并且以相关的解码方式,此处应当对应上方的charset
html=request.urlopen(re).read().decode('gbk','ignore')
#接下来创建beautifulsoup对象,找到相关的参数以便爬取内容
soup_text=BeautifulSoup(html,'lxml')
#在html中若是有class注意将其中的class改为class_(因为python中有个class关键字的存在了),在此应当对应上方说明的html的一小段的编码
texts=soup_text.find_all(id="content" ,class_="showtxt")
soup_texts=BeautifulSoup(str(texts),'lxml')
#输出时将删除相关的不符合要求的字符,将其替换为空白
print(soup_texts.div.text.replace('\xa0',''))
except error.URLError as e:
if hasattr(e, 'code'):
print('httperroe:')
print(e.cond)
if hasattr(e, 'reason'):
print('urlerror')
print(e.reason)

详细可参考:这篇文章


结果查看

  • 关于在第一段的实战效果:


  • 关于在第二段的实战效果:


最后

在网页中爬取的小说内容都是可以直接下载至本地的,具体的可以参考以上的那个学习教程。

---------------本文终---------------

文章作者:刘俊

最后更新:2019年01月02日 - 14:01

许可协议: 转载请保留原文链接及作者。