You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫获取的企业信息数组如何转键值对以生成DataFrame

实现方案

首先要修正你预期输出的语法错误:Python中列表(方括号[]包裹)不支持存储键值对,键值对必须放在字典(大括号{}包裹)中,我们最终会把每个企业对应的列表转换为字典格式,完全适配后续生成DataFrame的需求。

核心修改点

  • 修复原有parse函数的bug:你在函数开头直接写了return [x.getText() for x in heading_object],后面的代码永远不会执行,属于冗余代码可以直接删除。
  • 新增列表转字典的逻辑:每个抓取到的字符串都是字段名: 字段值的格式,我们按第一个冒号做分割,拆分后分别作为字典的键和值即可,额外加strip()清理前后多余空格。
  • 可选优化:对搜索关键词做URL编码,避免特殊字符导致请求异常;请求谷歌时增加User-Agent请求头,降低被拦截返回人机验证的概率。

完整修改后代码

import requests
import bs4
import pprint
from urllib.parse import quote
import pandas as pd

def parse(search):
    # 搜索词URL编码,增加请求头避免被拦截
    url = 'https://google.com/search?q=' + quote(search)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    request_result = requests.get(url, headers=headers)
    soup = bs4.BeautifulSoup(request_result.text, "html.parser")
    heading_object = soup.find_all('div', {'class': 'AVsepf'})
    return [x.getText() for x in heading_object]
      
results = {}

# 循环输入2个企业名称
for _ in range(2):
    pharm = input('enter the name of a pharmacy: ')
    print(pharm)
    info_list = parse(pharm)
    # 列表转字典逻辑
    info_dict = {}
    for item in info_list:
        # 只分割第一个冒号,避免字段值里有冒号导致格式错误
        if ':' in item:
            key, value = item.split(':', 1)
            info_dict[key.strip()] = value.strip()
    results[pharm] = info_dict

# 打印转换后的结果
pprint.pprint(results)

# 后续生成DataFrame可以直接用下面的代码
df = pd.DataFrame.from_dict(results, orient='index')
print(df)

输出效果

转换后的结果结构如下,完全符合你后续处理的需求:

{'ACME MARKETS INC': {'Customer service': '1 (877) 723-3929',
                      'Headquarters': 'Malvern, PA',
                      'Number of locations': '162',
                      'Founded': '1891, Philadelphia, PA',
                      'President': 'Jim Perkins',
                      'Parent organizations': 'Albertsons, Jewel, and American Stores',
                      'Founders': 'Samuel Robinson and Robert Crawford'},
 'RITE AID OF OHIO INC': {'Address': '7844 OH-45, Lisbon, OH 44432',
                          'Hours': 'Open ⋅ Closes 10PM',
                          'Phone': '(330) 424-7743',
                          'Headquarters': 'Camp Hill, PA',
                          'Founded': '1971',
                          'Parent organization': 'Rite Aid'}}

内容的提问来源于stack exchange,提问作者user11644013

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:36:03