如何用Python提取网页h3及a标签内容并保存为DataFrame?
完整实现代码
import requests from bs4 import BeautifulSoup import pandas as pd import time USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0" headers = {"user-agent": USER_AGENT} # 板块标识与中文名称映射 category_map = { 'rql': '肉禽蛋', 'scl': '水产类', 'shucailei': '蔬菜类', 'guopinlei': '果品类', 'mmdr': '米面豆乳', 'tiaoweipinl': '调味品', 'yaoshiqita': '药食及其他' } # 存储所有数据的列表 all_data = [] for cate_key, cate_name in category_map.items(): url = f'https://www.meishichina.com/YuanLiao/category/{cate_key}' resp = requests.get(url, headers=headers) resp.encoding = 'utf-8' # 避免中文乱码 soup = BeautifulSoup(resp.content, "html.parser") # 定位到分类内容主容器,过滤无关节点 cate_container = soup.find('div', class_='category_sub') if not cate_container: continue # 遍历当前页面所有分类 for h3 in cate_container.find_all('h3'): class_name = h3.text.strip() # 找到当前分类对应的条目列表 item_list = h3.find_next('ul') if not item_list: continue # 遍历该分类下所有条目 for a in item_list.find_all('a', href=True): item_name = a.text.strip() item_url = a['href'] all_data.append({ '板块': cate_name, '分类': class_name, '条目名称': item_name, '条目链接': item_url }) # 加延时避免触发反爬 time.sleep(1) # 转为DataFrame df = pd.DataFrame(all_data) # 可按需导出为CSV文件,utf_8_sig编码保证Excel打开无乱码 # df.to_csv('美食天下原料分类表.csv', index=False, encoding='utf_8_sig') print(df.head())
实现逻辑说明
- 提前定义板块标识和中文名称的映射,最终输出的板块字段直接为可读的中文名称
- 解析DOM时先定位到class为
category_sub的分类内容容器,避免提取到页面其他区域的无关h3标签 - 利用
find_next('ul')方法直接获取每个h3分类标题对应的条目列表,保证分类和条目对应关系准确 - 统一设置响应编码为utf-8,避免中文乱码
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

