如何用BeautifulSoup从指定HTML结构提取多类新闻信息
提取特定HTML新闻信息并转为DataFrame
假设你已经通过BeautifulSoup获取到了所有新闻条目列表news_items = soup.find_all('li', class_='list-group-item te-stream-item'),接下来可以按以下步骤拆分提取所需字段,最终生成DataFrame:
步骤1:初始化存储容器
先创建一个空列表,用于存放每条新闻的结构化数据:
import pandas as pd news_data = []
步骤2:遍历每条新闻条目,提取字段
对每个li条目逐一处理:
for item in news_items: # 1. 提取新闻标题 title_tag = item.find('a', class_='te-stream-title') news_title = title_tag.get_text(strip=True) if title_tag else '' # 2. 提取新闻分类(支持多分类拼接) category_div = item.find('div', class_='pull-right') if category_div: # 假设分类是div下的多个<a>标签,可根据实际标签调整 category_tags = category_div.find_all('a') news_categories = ', '.join([tag.get_text(strip=True) for tag in category_tags]) else: news_categories = '' # 3. 提取新闻内容与更新时间(拆分<br>前后文本) # 替换为网页中实际的master节点选择器,比如对应的class或标签 master_node = item.find('div', class_='master') news_content = '' update_time = '' if master_node: # 过滤掉空内容,拆分<br>前后的有效文本 contents = [elem.strip() for elem in master_node.contents if elem.strip()] if len(contents) >= 2: news_content = contents[0] update_time = contents[1] # 将本条新闻数据存入字典,添加到列表 news_data.append({ '新闻标题': news_title, '新闻分类': news_categories, '新闻内容': news_content, '更新时间': update_time })
步骤3:转换为DataFrame
将结构化的列表数据转为DataFrame:
news_df = pd.DataFrame(news_data) # 查看结果 print(news_df.head())
注意事项
- 若
master节点的实际标签或class不是div.master,请替换为网页中对应的选择器(比如p标签或其他class名)。 - 如果分类的承载标签不是
<a>(比如<span>),需要调整category_div.find_all('a')中的标签名。 - 加入
if xxx else ''的判断是为了避免部分新闻缺失字段导致报错,可根据需求改为None或其他默认值。
内容的提问来源于stack exchange,提问作者Subaru Spirit
相关产品推荐
相关产品推荐

