不分南北东西 发表于 2021-2-4 22:57:16

使用requests爬取汽车主机厂信息出现keyError错误

各位大神,大家好:

小白一名,最近在学习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['name_cn']#获取省份
    p_code=value['id']
    lis1.append(p_code)

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

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['shortname_cn']
      dealer_name=dealer_data.['coordinates']['name_cn']
      dealer_addr=dealer_data['addr_cn']
      dealer_tel=dealer_data['tel']
      lis3.append()
错误提示见附件:
网站信息见附件:

我百度了一下,好像是因为没有“shortname_cn”等的KEY,可是网页里明明有数据啊,谢大神解惑!!!感谢!!!

YunGuo 发表于 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()

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()

笨鸟学飞 发表于 2021-2-5 00:25:39

你直接浏览器访问https://cn-digital2-app.bmw.com.cn/dlo/v1/locales?brand_id=1不就知道有没有了?
确实没有啊,你是想爬取什么信息啊?你那个信息里面只有id和城市名

不分南北东西 发表于 2021-2-5 14:30:32

YunGuo 发表于 2021-2-4 22:57
很多处错误,爬虫写代码要细心。
把你代码改了一下后运行没问题。

谢谢,我复制代码确实可以实现

不分南北东西 发表于 2021-2-5 14:31:17

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

谢谢,又学到一招,我是刚学,所以好多知识都不太明白,见笑了~{:5_92:}
页: [1]
查看完整版本: 使用requests爬取汽车主机厂信息出现keyError错误