如何将爬虫爬取的表格数据追加到pandas DataFrame并输出指定结构化格式
实现代码
import requests from bs4 import BeautifulSoup import pandas as pd headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get('http://smartcatalog.emo-milano.com/it/espositore/a-mannesmann-maschinenfabrik-gmbh') soup = BeautifulSoup(response.content, 'html.parser') tables = soup.find_all('table', class_='expo-table general-color') # 存储字段键值对 data_dict = {} for table in tables: # 遍历表格每行 for tr in table.find_all('tr'): tds = tr.find_all('td') # 过滤有效行(至少2个td节点) if len(tds) >= 2: # 拼接字段名和值,处理多段文本的情况 field = ' '.join([text for text in tds[0].stripped_strings]) value = ' '.join([text for text in tds[1].stripped_strings]) data_dict[field] = value # 可选:字段名翻译为中文 translate_map = { 'Indirizzo': '地址', 'Città': '城市', 'Nazionalità': '国籍', 'Sito web': '官网', 'Stand': '展位', 'Telefono': '电话', 'Fax': '传真', 'E-mail': '邮箱', 'Membro di': '所属协会', 'Social': '社交账号' } data_dict = {translate_map.get(k, k): v for k, v in data_dict.items()} # 转成两列结构的DataFrame df = pd.DataFrame(data_dict.items(), columns=['字段名', '字段值']) # 输出对齐的结构化内容 print(df.to_string(index=False, header=False))
代码说明
- 原代码直接遍历所有td节点,没有对齐字段名和对应值,修改后按
<tr>行节点遍历,每行取前2个td分别作为字段名、字段值 - 用空格拼接同个节点下的多段拆分字符串,避免内容丢失
- 支持两种输出结构:如果需要把所有字段作为列名、单条数据存为一行,替换DataFrame生成逻辑为
df = pd.DataFrame([data_dict])即可 - 内置意大利语字段转中文的映射,不需要可以直接删除对应代码块
内容的提问来源于stack exchange,提问作者Amen Aziz
相关产品推荐
相关产品推荐

