如何用Python抓取<tr>标签中多内容并拆分至3个变量?
解决方案
问题出在你直接提取了<tr>标签的全部文本,没有按内部的<td>标签拆分内容。网页中每个车型的品牌、型号、交期分别对应<tr>里的不同<td>元素,我们需要逐个提取这些<td>的内容。
修改后的代码
from bs4 import BeautifulSoup import requests URL = 'https://www.carwow.de/neuwagen-lieferzeiten#gref' response = requests.get(URL) response.raise_for_status() soup = BeautifulSoup(response.text, 'lxml') # 遍历所有包含车型数据的tbody for tbody in soup.find_all('tbody'): # 处理每个车型行 for row in tbody.find_all('tr'): # 获取当前行的所有<td>元素 tds = row.find_all('td') # 跳过无效行(比如表头或空行) if len(tds) >= 3: # 提取并清洗各字段内容 oem = tds[0].text.strip() model = tds[1].text.strip() # 处理交期里的换行,用逗号分隔多段交期 leadtime = tds[2].text.strip().replace('\n', ', ') # 按指定格式输出 print(f"{oem}, {model}, {leadtime}")
代码说明
- 定位元素:通过
<tbody>和<tr>定位到每一行车型数据,再用<td>拆分出品牌、型号、交期三个部分。 - 数据清洗:用
strip()去除文本前后的空格和换行,对包含多段交期的内容,用replace('\n', ', ')将换行替换为逗号分隔。 - 跳过无效行:通过判断
<td>数量过滤掉表头或空行,避免报错。
运行这段代码后,输出会符合你预期的格式:
Renault, Mégane E-Tech, 12 Monate Nissan, Ariya, 6 Monate Peugeot, e-208, 6-7 Monate KIA, Sportage, 5-6 Monate, 6-7 Monate (Hybrid) Jeep, Compass, 3-5 Monate, 3-5 Monate (Hybrid) VW, Taigo, 3-6 Monate Volvo, XC90, 10-12 Monate
内容的提问来源于stack exchange,提问作者Irra
相关产品推荐
相关产品推荐

