Python爬虫实战:诗词名句网《三国演义》全集
Beautiful Soup实战案例:爬取\"诗词名句网\"
目标
爬取\"诗词名句网\"上的古典文学作品内容,包括书籍目录和章节内容,并将每章内容独立保存为文本文件。
目标网址: 《三国演义》全集在线阅读_史书典籍_诗词名句网
要求
-
书籍目录管理:目录名基于书籍名称动态生成
-
目录页解析: 下载书籍目录页HTML、解析章节列表结构
-
章节信息提取: 构建完整章节URL(基础URL + 相对路径)
-
章节内容获取: 下载各章节HTML内容
-
内容提取与处理: BS作为主要解析器、提取纯文本内容(去除HTML标签)
-
文件存储规范: 文件名安全处理、使用章节名称作为文件名
-
进度反馈: 目录创建成功通知 、文件写入成功确认等
代码
import requestsfrom bs4 import BeautifulSoupimport reimport osfrom urllib.parse import urljoin# 创建目录if not os.path.exists(\'三国演义\'): os.mkdir(\'三国演义\')# 目标网址url = \'https://www.shicimingju.com/book/sanguoyanyi.html\'# 伪装浏览器headers = { \'user-agent\':\'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0\'}# 发送请求,获取响应response = requests.get(url, headers=headers)# 进行编码response.encoding = \'utf-8\'# 转成html对象,从而提取数据html = BeautifulSoup(response.text,\'lxml\')# 得到对象tablis = html.select(\'a[class=\"tabli\"]\')# 循环提取数据for tabli in tablis: my_dict = { \'章节名称\':\'\', \'详情页地址\':\'\' } tabli_name = tabli.get_text().strip() if tabli_name: # 将章节名称进行特殊符号的替换 safe_name = re.sub(r\'[\\\\/*?]\',\'\',tabli_name) my_dict[\'章节名称\'] = safe_name tabli_href = tabli.attrs.get(\'href\') if tabli_href: # 建立完整的url地址 new_href = urljoin(\'https://www.shicimingju.com/\',tabli_href) my_dict[\'详情页地址\'] = new_href # 发送二次请求,获取详情内容 response_content = requests.get(new_href,headers=headers) response_content.encoding = \'utf-8\' # 转成html格式 content_html = BeautifulSoup(response_content.text,\'lxml\') # 获取文本对象 div_content = content_html.select(\'div[class=\"text p_pad\"]\') # 提取文章内容 content = div_content[0].get_text() # 写入文件 file_name = f\'{safe_name}.txt\' with open(os.path.join(\'三国演义\',file_name),\'w\',encoding=\'utf-8\') as f: f.write(content) print(my_dict)