鱼C论坛

 找回密码
 立即注册
查看: 1452|回复: 4

[已解决]使用requests爬取汽车主机厂信息出现keyError错误

[复制链接]
发表于 2021-2-4 22:57:16 | 显示全部楼层 |阅读模式
20鱼币
各位大神,大家好:

小白一名,最近在学习requests相关知识,拿某汽车主机厂官网爬取经销商相关信息,出现keyError错误(请忽视我代码的丑陋):

代码如下:

'''爬取各汽车主机厂官网经销商数据'''

import requests
from bs4 import BeautifulSoup as bs

lis1=[]
lis2=[]
lis3=[]

url='https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1'
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'}
r=requests.get(url,headers=headers)#发送请求,获得页面信息

r_json=r.json()#反序列化,将json数据转为字典
value=r_json['data']#json是个字典,它的值是列表
for i in range(len(value)):
    p_name=value[i]['name_cn']#获取省份
    p_code=value[i]['id']
    lis1.append(p_code)

    value_city=value[i]['cities']
    for j in range(len(value_city)):
        c_name=value_city[j]['name_cn']#城市名称
        c_code=value_city[j]['id']#城市代码
        lis2.append([c_name,c_code])

for i in lis1:
    url_1='https://cn-digital2-app.bmw.com.cn/dlo/v1/outlets'
    params={'brand_id': '1','province_id': i}
    r_2=requests.get(url,headers=headers,params=params)
    r_2json=r_2.json()
    dealer_data=r_2json['data']#根据分析,这是一个列表
    for j in range(len(dealer_data)):
        dealer_shortname=dealer_data[j]['shortname_cn']
        dealer_name=dealer_data[j].['coordinates']['name_cn']
        dealer_addr=dealer_data[j]['addr_cn']
        dealer_tel=dealer_data[j]['tel']
        lis3.append([dealer_name,dealer_shortname,dealer_addr,dealer_tel])
错误提示见附件:
网站信息见附件:

我百度了一下,好像是因为没有“shortname_cn”等的KEY,可是网页里明明有数据啊,谢大神解惑!!!感谢!!!
最佳答案
2021-2-4 22:57:17
本帖最后由 YunGuo 于 2021-2-5 02:23 编辑

很多处错误,爬虫写代码要细心。
把你代码改了一下后运行没问题。
import requests

lis1 = []
lis2 = []
lis3 = []

url = 'https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1'
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'}
r = requests.get(url, headers=headers)
r_json = r.json()['data']
for i in r_json:
    p_name = i['name_cn']
    p_code = i['id']
    lis1.append(p_code)
    value_city = i['cities']
    for j in value_city:
        c_name = j['name_cn']
        c_code = j['id']
        lis2.append([c_name, c_code])

for code in lis1:
    url_1 = 'https://cn-digital2-app.bmw.com.cn/dlo/v1/outlets'
    params = {'brand_id': 1, 'province_id': code}
    r_2 = requests.get(url_1, headers=headers, params=params)
    r_2json = r_2.json()['data']
    for item in r_2json:
        dealer_shortname = item['shortname_cn']
        dealer_name = item['name_cn']
        dealer_addr = item['addr_cn']
        dealer_tel = item['tel']
        lis3.append([dealer_name, dealer_shortname, dealer_addr, dealer_tel])

最佳答案

查看完整内容

很多处错误,爬虫写代码要细心。 把你代码改了一下后运行没问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-4 22:57:17 | 显示全部楼层    本楼为最佳答案   
本帖最后由 YunGuo 于 2021-2-5 02:23 编辑

很多处错误,爬虫写代码要细心。
把你代码改了一下后运行没问题。
import requests

lis1 = []
lis2 = []
lis3 = []

url = 'https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1'
headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36'}
r = requests.get(url, headers=headers)
r_json = r.json()['data']
for i in r_json:
    p_name = i['name_cn']
    p_code = i['id']
    lis1.append(p_code)
    value_city = i['cities']
    for j in value_city:
        c_name = j['name_cn']
        c_code = j['id']
        lis2.append([c_name, c_code])

for code in lis1:
    url_1 = 'https://cn-digital2-app.bmw.com.cn/dlo/v1/outlets'
    params = {'brand_id': 1, 'province_id': code}
    r_2 = requests.get(url_1, headers=headers, params=params)
    r_2json = r_2.json()['data']
    for item in r_2json:
        dealer_shortname = item['shortname_cn']
        dealer_name = item['name_cn']
        dealer_addr = item['addr_cn']
        dealer_tel = item['tel']
        lis3.append([dealer_name, dealer_shortname, dealer_addr, dealer_tel])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-5 00:25:39 | 显示全部楼层
你直接浏览器访问https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1不就知道有没有了?
确实没有啊,你是想爬取什么信息啊?你那个信息里面只有id和城市名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-5 14:30:32 | 显示全部楼层
YunGuo 发表于 2021-2-4 22:57
很多处错误,爬虫写代码要细心。
把你代码改了一下后运行没问题。

谢谢,我复制代码确实可以实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-2-5 14:31:17 | 显示全部楼层
笨鸟学飞 发表于 2021-2-5 00:25
你直接浏览器访问https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1不就知道有没有了?
确实 ...

谢谢,又学到一招,我是刚学,所以好多知识都不太明白,见笑了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 13:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表