如何使用Python爬虫提取<span>的id值及同div下的<p>元素?
解决方案
问题分析
你的代码存在两个核心问题:一是全局抓取所有<a>和<p>,无法保证两者属于同一父容器的对应关系;二是未定义变量infoo,会直接触发运行报错。另外需要实现英文文本的中文翻译转换。
修正步骤
先安装翻译依赖(若需自动翻译):
pip install googletrans==4.0.0-rc1
使用以下修正后的代码:
import requests from bs4 import BeautifulSoup from googletrans import Translator # 初始化翻译器 translator = Translator(service_urls=['translate.googleapis.com']) # 请求页面并解析HTML response = requests.get('https://www.osha.gov/laws-regs/regulations/standardnumber/1926/1926.451#1926.451(a)(6)') soup = BeautifulSoup(response.text, 'html.parser') # 定位所有目标段落的容器div paragraph_boxes = soup.find_all('div', class_='paragraph paragraph--type--regulations-standard-number paragraph--view-mode--token') # 写入结果到文件 with open('osha.txt', 'w', encoding='utf-8') as f: for box in paragraph_boxes: # 提取span的id值 span_id = box.find('span').get('id') # 提取p标签文本并清理格式 raw_text = box.find('p').get_text(strip=True).strip('"') # 翻译为中文 cn_text = translator.translate(raw_text, dest='zh-CN').text # 按格式写入内容 f.write(f"{span_id}\n") f.write(f"{cn_text}\n") f.write('-' * 50 + '\n')
代码说明
- 直接定位每个标准段落的父容器,确保
span和p属于同一模块,避免全局抓取的匹配错位问题。 - 自动清理文本中的多余引号和空格,让输出更整洁。
- 用
utf-8编码写入文件,避免中文乱码。 - 通过
googletrans实现英文到中文的自动翻译,满足输出中文的需求。
内容的提问来源于stack exchange,提问作者jabbar
相关产品推荐
相关产品推荐

