学100种基本爬虫项目--使用正则表达式来获取整篇小说
我们要爬取的小说为以下小说,结尾附上整体代码以及注意事项
在这篇文章中,我将展示如何使用Python和正则表达式来爬取整篇小说的内容。我们的目标是从"bbiquge"网站上获取某本小说的全文内容,并保存为.txt文件。我们将使用requests库进行网络请求,使用re和parsel库来解析页面,并把小说内容保存到本地。
1.导入需要的模块:此段代码首先导入了几个Python的标准库如os.path
、re
,以及第三方库requests
和parsel
。这些库分别用于处理文件路径、处理正则表达式、发送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="https://blog.csdn.net/Volcano99/article/details/(.*?)">(.*?)</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)
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgffbkf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01