使用Python和BeautifulSoup提取HTML指定元素并生成目标格式内容
问题修正方案
原代码存在的问题
- 每次遍历
<hr>时都会全局查找所有<li>,导致重复输出内容 - 直接输出整个
<li>的文本,包含了不需要的Nation和Related Persons相关信息 - 输出格式不符合需求,存在多余的符号和换行
修正后的代码
from bs4 import BeautifulSoup import requests import linkMaker as linkMaker url = linkMaker.link page = requests.get(url) soup = BeautifulSoup(page.content, "html.parser") with open("test1.txt", "w") as file: # 遍历每个hr元素 for hr in soup.find_all('hr'): # 获取hr后面紧邻的ul元素 target_ul = hr.find_next_sibling('ul') if target_ul: # 处理当前ul下的每个li for li in target_ul.find_all('li'): # 提取标题并清理多余字符 title = li.b.get_text(strip=True).rstrip(" - .") # 提取描述文本:定位到最后一个a标签后的内容 last_link = li.find_all('a')[-1] description = last_link.next_sibling.next_sibling.get_text(strip=True).rstrip(".") # 按要求格式写入文件 file.write(f"{title}\n{description}\n\n")
代码说明
- 精准定位元素:通过
hr.find_next_sibling('ul')只处理当前<hr>对应的<ul>,避免全局查找导致的重复输出 - 提取标题:从
<li>内的<b>标签获取标题,并通过rstrip(" - .")去除末尾多余的- .符号 - 提取描述文本:定位到
<li>内最后一个<a>标签,取其后续的文本节点作为描述内容,同时清理首尾空格和末尾多余的句号 - 格式输出:按照需求的换行格式写入文件,确保标题和描述各占一行,条目间空行分隔
内容的提问来源于stack exchange,提问作者qLu
相关产品推荐
相关产品推荐

