使用正则表达式爬取一本喜欢的小说

这个爬虫的案例是对正则表达式的运用,通过这个案例,我们可以对正则表达式有更深入的了解。

1. 信息来源:

努努书坊。爬取的小说:三国演义。链接为:https://www.kanunu8.com/files/old/2011/2447.html

Python爬虫——使用正则表达式爬取一本喜欢的小说

2. 解析需要爬取的信息:

进入主页,我们可以看到如上图所示的信息,我们需要爬取的就是上图中的所有内容。即每个章节中的内容。这是一个两层爬虫,即我们首先要得到每个章节的链接,再通过每个章节的链接得到每个章节的信息。

我们在主页中点击右键——>查看网页源代码——>找到对应的章节的信息——>如图所示——>获取出对应的链接信息和标题

Python爬虫——使用正则表达式爬取一本喜欢的小说

Python爬虫——使用正则表达式爬取一本喜欢的小说

我们对上图所示的信息进行分析,可以发现:(匹配就得多试验,每个人的匹配方式可能不同,多尝试)

  • 链接和标题可以通过正则表达式—— r'<td( width="50%")?><a href="(.+\.html)">(.+)</a>' 匹配到;
  • 正文信息可以通过正则表达式——  r'<p>(.+)</p>' 匹配到;

3. 代码如下:

import requests
import re

url='https://www.kanunu8.com/files/old/2011/2447.html'
txt=requests.get(url).content.decode('gbk')
m1=re.compile(r'<td colspan="4" align="center"><strong>(.+)</strong>')
print(m1.findall(txt)[0])
m2=re.compile(r'<td( width="50%")?><a href="(.+\.html)">(.+)</a>')
raw=m2.findall(txt)
sanguo=[]
r_url='https://www.kanunu8.com/files/old/2011/'
for i in raw:
    sanguo.append([i[2],r_url+i[1]])
m3=re.compile(r'<p>(.+)</p>',re.S)
m4=re.compile(r'<br />')

#保存到文件中
with open('三国演义.txt','a')as f:
    for zj in sanguo:
        zj_url=zj[1]
        print("正在下载----->",zj[0])
        r_nr=requests.get(zj_url).content.decode('gbk')
        n_nr = m3.findall(r_nr)
        f.write('\n'+zj[0]+'\n')
        f.write(m4.sub('',n_nr[0]))

结果如下:小说就被我们成功的爬取下来了。

Python爬虫——使用正则表达式爬取一本喜欢的小说

Python爬虫——使用正则表达式爬取一本喜欢的小说

相关文章:

  • 2021-05-19
  • 2021-10-21
  • 2021-12-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-05
  • 2021-08-11
猜你喜欢
  • 2022-12-23
  • 2021-10-24
  • 2021-10-01
  • 2021-04-23
  • 2021-09-23
  • 2021-07-09
  • 2021-08-04
相关资源
相似解决方案