使用正则表达式进行小说爬虫

此链接是正则表达式的知识点,知识点与实例结合起来有助于理解哦!—— Python基础——正则表达式

本次爬虫,我是对努努书坊 — 小说在线阅读中的《后宫:甄嬛传1》进行爬取。

爬虫思路如下:

1、进入小说目录的界面(此时链接为 url = https://www.kanunu8.com/book/3813/),点击右键,查看网页源代码,找到含有目录的地方,通过下面代码可以将" width=25%(如果没有则为空字符串)、href 以及 目录"以列表的形式爬取下来:

m1=re.compile(r'<td( width="25%")?><a href="(.+\.html)">(.+)</a></td>')
  • 小说部分目录:

  •  爬取结果如下:

2、点击目录前的链接 href,便能跳到相应章节的网页源代码(此时链接为 https://www.kanunu8.com/book/3813/38501.html),观察链接的规律可发现:章节内容的链接等于 url(小说目录界面的链接) + href

观察可发现作者简介的内容在一对尖括号 <p></p> 中,通过下面代码可将其提取出来

m2=re.compile(r'<p>(.+)</p>',re.S)
  • 作者简介的部分网页源代码:

  • 由上图可知,<br />也是多余的,可通过以下代码将其去掉
m3=re.compile(r"<br />")
nrl=m3.sub("",nr)

以下是爬取《后宫:甄嬛传1》的完整代码:

#小说爬虫  作者:成纤纤
import requests
import re
url="https://www.kanunu8.com/book/3813/"
txt=requests.get(url).content.decode("gbk")

m1=re.compile(r'<td( width="25%")?><a href="(.+\.html)">(.+)</a></td>')
m2=re.compile(r'<p>(.+)</p>',re.S)
m3=re.compile(r"<br />")
raw=m1.findall(txt)   #将所有符合" width=25%(如果没有则为空字符串)、href 以及 目录"的字符串爬取下来
ilist=[(i[2],url+i[1]) for i in raw]     #将目录以及小说某章节的完整链接进行遍历
print("小说目录已下载完毕!")
with open("后宫:甄嬛传1.txt","a") as f:  #文件读写
    for i in ilist:
        print("开始下载--->",i[0])       #i[0] 为开始下载章节对应的目录
        t1=requests.get(i[1]).content.decode("gbk")
        nr=m2.findall(t1)[0]            #读取尖括号<p></p>中的内容
        nrl=m3.sub("",nr)               #去除尖括号<p></p>中的<br />
        f.write(i[0].center(200))       #以下代码是为了提高爬取下来小说的可读性,使标题与内容之间有间距
        f.write('\n\n')
        f.write(nrl)
        f.write('\n\n')
        
print("下载完毕!")
        

建议大家可以照着敲一敲,如果有不懂的地方将其结果打印出来(print) ,对代码进行调试。或者可以留言,我看到之后会立马进行回复的^_^

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值