|
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,可是网页里明明有数据啊,谢大神解惑!!!感谢!!!
本帖最后由 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])
复制代码
|
最佳答案
查看完整内容
很多处错误,爬虫写代码要细心。
把你代码改了一下后运行没问题。
|