学100种基本爬虫项目--使用正则表达式来获取整篇小说

我们要爬取的小说为以下小说,结尾附上整体代码以及注意事项

 在这篇文章中,我将展示如何使用Python和正则表达式来爬取整篇小说的内容。我们的目标是从"bbiquge"网站上获取某本小说的全文内容,并保存为.txt文件。我们将使用requests库进行网络请求,使用re和parsel库来解析页面,并把小说内容保存到本地。

1.导入需要的模块:此段代码首先导入了几个Python的标准库如os.pathre,以及第三方库requestsparsel。这些库分别用于处理文件路径、处理正则表达式、发送HTTP请求和解析HTML文档。

import os.path
import re
import requests
import parsel

2.设置初始参数:设置了小说的URL(list_url),以及发送HTTP请求时使用的请求头(headers)。请求头中的User-Agent是用来伪装成一个正常的浏览器,以防止服务器因为检测到是爬虫而拒绝服务。

list_url='https://www.bbiquge.net/book/133303/' 
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}

3.发送请求并获取响应:通过requests.get方法发送GET请求到list_url,并使用headers作为请求头。然后获取响应并设置响应的编码为'gbk'。

response=requests.get(url=list_url,headers=headers)
response.encoding='gbk'

4.提取信息:使用re.findall方法和正则表达式从响应的文本中提取所有的章节链接(href)以及小说的名字(name)。

href=re.findall('<dd><a href="(.*?)">(.*?)</a></dd>',response.text)
name=re.findall('<div id="picbox"><div class="img_in"><img src="https://www.biqugevip.net/files/article/image/133/133301/133301s.jpg" alt="(.*?)"',response.text)[0]

5.遍历所有章节并下载:对每一个提取到的章节链接,发送GET请求获取章节页面的HTML,然后解析HTML以提取章节标题和内容。最后,将提取到的标题和内容写入到本地的txt文件。

for index in href:
    index_url='https://www.biqugevip.net/book/133303/'+index[0]
    selector=parsel.Selector(requests.get(url=index_url,headers=headers).text)
    title=selector.css('#main > h1::text').get()
    contest_list=selector.css('#content::text').getall()
    contest="\n".join(contest_list)
    with open(fr'D:\爬取文本存放位置\一百种爬虫方式\{name}.txt',mode='a', encoding='utf-8') as f:
        f.write(title)
        f.write('\n')
        f.write(contest)
        f.write('\n')
    print('正在保存:',title)

在这段代码中,首先是拼接出每个章节的URL(index_url)。然后发送GET请求获取章节页面的HTML,并使用parsel.Selector对HTML进行解析。然后提取出章节的标题(title)以及内容(contest_list),并将内容的列表通过\n合并成一个字符串(contest)。最后,打开(如果不存在则创建)一个txt文件,并以追加的模式将标题和内容写入文件。在写入每个章节的内容后,会打印一条消息表示该章节已经保存。

运行结果:

效果展示: 

 整体代码

# _*_coding :utf-8 _*_
# @time 2023/7/14 20:24
# @Author :volcano
# @File 爬取小说
# @Proect :workspace
#模拟浏览器对服务器发送请求
#导入请求模块
import os.path
import re
import requests
#导入解析模块
import parsel
list_url='https://www.bbiquge.net/book/133303/'#用自定义的变量接收字符串的数据内容
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
response=requests.get(url=list_url,headers=headers)
response.encoding='gbk'
# print(response.text.replace('<br>', '\n'))  # 使用replace将"<br>"替换为换行符"\n"
href=re.findall('<dd><a href="(.*?)">(.*?)</a></dd>',response.text)
name=re.findall('<div id="picbox"><div class="img_in"><img src="https://www.biqugevip.net/files/article/image/133/133301/133301s.jpg" alt="(.*?)"',response.text)[0]
# print(href)
for index in href:
    index_url='https://www.biqugevip.net/book/133303/'+index[0]
    # print(index_url)

    selector=parsel.Selector(requests.get(url=index_url,headers=headers).text)
    #h1::text提取h1标签当中的文本 get的意思是获得的意思
    title=selector.css('#main > h1::text').get()
    # print(title)
    contest_list=selector.css('#content::text').getall()
    contest="\n".join(contest_list)
    # print(string)
    with open(fr'D:\爬取文本存放位置\一百种爬虫方式\{name}.txt',mode='a', encoding='utf-8') as f:
        f.write(title)
        f.write('\n')
        f.write(contest)
        f.write('\n')
    print('正在保存:',title)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Volcanoforever

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值