ToB企服应用市场:ToB评测及商务社交产业平台
标题:
使用Python中的DrissonPage库爬取小说网站并保存章节内容(bqg)
[打印本页]
作者:
风雨同行
时间:
2024-11-1 02:43
标题:
使用Python中的DrissonPage库爬取小说网站并保存章节内容(bqg)
前言
在这个教程中,我们将学习如何使用Python联合DrissionPage库来自动化浏览器操作,从而从一个小说网站(bqg)上抓取小说的章节链接和内容,并将这些内容保存到本地文件。本文将具体介绍整个过程,并提供完整的代码示例。
准备工作
在开始之前,请确保已经安装了以下Python库:
drissionpage:用于控制浏览器行为。
fake_useragent:天生随机用户代理字符串以避免被目标网站识别为自动化脚本。
os 和 random:操作体系相关的功能和天生随机数。
可以通过pip命令安装所需的库:
pip install drissionpage fake_useragent
复制代码
代码详解
1. 导入必要的模块
首先导入需要用到的Python标准库以及第三方库:
import os # 用于文件和目录操作
import random # 用于生成随机数
import time # 用于暂停程序执行
from fake_useragent import UserAgent # 用于生成随机的用户代理字符串
from DrissionPage import ChromiumPage, ChromiumOptions # 用于自动化浏览器操作
复制代码
2. 定义获取章节链接的函数
定义一个名为fetch_links_data的函数,该函数负责打开指定的小说页面,提取所有章节的链接,并创建存储小说内容的目录。
def fetch_links_data():
co = ChromiumOptions() # 创建Chromium选项实例
user_agent = f"{UserAgent().random}" # 生成随机的用户代理
print(user_agent) # 打印当前使用的用户代理
co.set_user_agent(user_agent=user_agent) # 设置浏览器的用户代理
# 初始化ChromiumPage实例,使用上面设置的选项
page = ChromiumPage(addr_or_opts=co)
url = "https://www.3bqg.cc/book/9753/" # 目标小说页面URL
tab = page.new_tab(url) # 在新的标签页中打开目标URL
tab.wait.load_start() # 等待页面加载开始
novel_name = tab.ele('x://div[@class="info"]/h1').text # 获取小说名称
print(novel_name) # 打印小说名称
# 创建小说对应的目录,如果已存在则不创建
novel_path = os.path.join(os.getcwd(), novel_name)
os.makedirs(novel_path, exist_ok=True)
print(novel_path) # 打印小说存储路径
last_link = tab.ele('x://div[@class="listmain"]/dl/dd[21]/a').attr('href') # 获取最后一个章节链接
print(last_link) # 打印最后一个章节链接
# 提取章节编号
chapter_number = int(last_link.split('/')[-1].split('.')[0])
# 构造所有章节的链接列表
all_chapter_links = [f"{url}{i}.html" for i in range(1, chapter_number + 1)]
print("所有链接获取完成")
tab.close() # 关闭当前标签页
return all_chapter_links, novel_path # 返回所有章节链接和小说目录路径
复制代码
3. 定义下载章节内容的函数
接下来定义一个名为fetch_content_data的函数,它吸收单个章节链接和存储路径作为参数,然后抓取该章节的内容并将其保存为文本文件。
def fetch_content_data(link, novel_path):
time.sleep(random.uniform(1, 3)) # 随机等待一段时间,避免过于频繁请求
co = ChromiumOptions()
user_agent = f"{UserAgent().random}"
print(user_agent)
co.set_user_agent(user_agent=user_agent)
# 初始化ChromiumPage实例
page = ChromiumPage(addr_or_opts=co)
url = link # 当前章节的URL
tab = page.new_tab(url)
tab.wait.load_start()
chapter_name = tab.ele('x://div[@class="content"]/h1').text # 获取章节标题
print(chapter_name) # 打印章节标题
content = tab.ele('x://div[@class="Readarea ReadAjax_content"]').text # 获取章节内容
# 将章节内容写入到对应的小说目录下的文件中
with open(f"{novel_path}/{chapter_name}.txt", 'w', encoding='utf-8') as f:
f.write(content)
tab.close() # 关闭当前标签页
复制代码
4. 主步伐逻辑
末了,在主步伐部分调用上述两个函数,实现对整个小说的抓取与保存。
# 调用函数获取所有章节链接及小说路径
all_chapter_links, novel_path = fetch_links_data()
# 循环处理每一个章节链接
for link in all_chapter_links:
fetch_content_data(link, novel_path)
复制代码
运行结果
控制台输入
爬取小说章节内容
总结
以上就是使用Python举行网络爬虫抓取小说内容的一个简单案例。
假如有爬虫的需求的话可以到,【python爬虫 文档、图片等数据抓取】
请注意,渴望合理设置请求间隔时间,避免对服务器造成过大负担。
本代码仅用于学习和研究目的,不得用于商业用途或其他非法活动。
使用者自行承担因不当使用代码而产生的任何法律责任。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4