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
相关产品推荐
相关产品推荐

