不分南北东西 发表于 2021-3-15 10:43:09

求奥迪官方经销商相关信息python爬虫代码

各位大神好:

求奥迪官方经销商信息(经销商名称、省份、城市、地址、电话等))代码!
因为我只学过requests和beautifulsoup,如果可以的话,请使用这个,感谢!

柿子饼同学 发表于 2021-3-15 10:44:18

网站发一下

不分南北东西 发表于 2021-3-15 13:37:05

柿子饼同学 发表于 2021-3-15 10:44
网站发一下

https://contact.audi.cn/dealer_procity.html{:5_111:}

柿子饼同学 发表于 2021-3-15 15:09:18

这有点南,我尽力了{:10_266:}首先,要知道所有的代码在哪,可以从文件入手,如图0.这就找到了
然后按照网址进入   【传送门】   
你看看它的源码图1
代码如下

import re
import requests as r

headers={"User-Agent":
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0"}
url = 'https://contact.audi.cn/dictionary_js/map_dealer.js?v=0.3'

res = r.get(url,headers=headers)
res.encoding                                             #解码,不然是繁体字
l = re.findall(r'dealers.+]', res.text)这里只好用正则,不然没法弄然后得到一个列表,里面就是一切信息,不过我后面也化简不了了,只能先这样了
然后就是你为什么要爬这个网站,用课上教的例子随便写写它不香吗ε=( o`ω′)ノ{:10_250:}


YunGuo 发表于 2021-3-16 00:25:16

本帖最后由 YunGuo 于 2021-3-16 15:10 编辑

import re
import csv
import requests

def get_js():
    url = 'https://contact.audi.cn/dictionary_js/map_dealer.js?v=0.3'
    res = requests.get(url)
    js = re.findall(r'var dealers = \[];(.*?)type\', res.text, re.S)
    return js

def get_city(js):
    # 获取省份
    provinces = re.findall("dprovinces\[\d+\]=\['(\d+)','\w(.*?)'\];", js)
    province_dic = {code : province_name for code, province_name in provinces}
    # 获取城市
    city_infos = re.findall(r"dcitys\['(\d+)'\]=(.*?);", js)
    citys_dic = {}
    for city_info in city_infos:
      c_code, citys = city_info
      cit = {city: city for city in eval(citys)}
      citys_dic.update({province_dic: cit})
    return citys_dic

def get_distributor(js, citys_dic):
    # 获取经销商信息
    distributor_infos = re.findall(r"dealers\['(\d+)'\]=(.*?);", js)
    distributor_dic = {}
    distributor_lis = []
    for distributor_info in distributor_infos:
      codes, infos = distributor_info
      province = ''
      city = ''
      for k,v in citys_dic.items():
            for kk,vv in v.items():
                if codes == kk:
                  province = k
                  city = vv
                  break
      for info in eval(infos):
            distributor_name = info
            distributor_add = info
            distributor_tel = f'{info[-1]}-{info}'
            distributor_lis.append()
    return distributor_lis

def save(item):
    # 保存
    with open('audi.csv', 'a', newline='') as f:
      writer = csv.writer(f)
      writer.writerow(['省份', '城市', '经销商', '地址', '联系方式'])
      writer.writerows(item)
    print('保存完成')

if __name__ == '__main__':
    js_code = get_js()
    city_info = get_city(js_code)
    distributor_lis = get_distributor(js_code, city_info)
    save(distributor_lis)

不分南北东西 发表于 2021-3-16 09:08:43

柿子饼同学 发表于 2021-3-15 15:09
这有点南,我尽力了首先,要知道所有的代码在哪,可以从文件入手,如图0.这就找到了
然后按照网 ...

谢谢大神,因为实际当中需要用这个,自己在爬取的时候,感觉书上的都用不到,挫败感十足。。。

不分南北东西 发表于 2021-3-16 09:09:35

YunGuo 发表于 2021-3-16 00:25


我刚才在pycharm上试了一下,还没有通过,不过先给最佳答案了,大神!

YunGuo 发表于 2021-3-16 15:08:49

本帖最后由 YunGuo 于 2021-3-16 15:12 编辑

不分南北东西 发表于 2021-3-16 09:09
我刚才在pycharm上试了一下,还没有通过,不过先给最佳答案了,大神!

我运行没有问题。你运行如果有问题,可以把报错信息发给我看看。
另外,之前在复制代码的时候漏了一个引入requests库,上面代码已经重新编辑补上。

不分南北东西 发表于 2021-3-16 20:11:47

YunGuo 发表于 2021-3-16 15:08
我运行没有问题。你运行如果有问题,可以把报错信息发给我看看。
另外,之前在复制代码的时候漏了一个 ...

运行没有问题了,大神,感谢

不分南北东西 发表于 2021-6-8 10:53:39

YunGuo 发表于 2021-3-16 15:08
我运行没有问题。你运行如果有问题,可以把报错信息发给我看看。
另外,之前在复制代码的时候漏了一个 ...

大神,你好:
今年3月份的时候,我发子一个求奥迪官方经销商相关信息代码的帖子,当时你帮我解决了。我今天复习代码的时候,有一个地方不太明白,再次请教一下,盼答复,感谢!

url = 'https://contact.audi.cn/dictionary_js/map_dealer.js?v=0.3'
    res = requests.get(url)
    js = re.findall(r'var dealers = \[];(.*?)type\', res.text, re.S)
    return js
倒数第二行是什么意思啊(我自行运行了一下,如果没有就不会换行),感谢!

wp231957 发表于 2021-6-8 11:00:27

不分南北东西 发表于 2021-6-8 10:53
大神,你好:
今年3月份的时候,我发子一个求奥迪官方经销商相关信息代码的帖子,当时你帮我解决了。我 ...

re.findall返回的是一个列表
就是第一个元素

不分南北东西 发表于 2021-6-8 21:34:54

wp231957 发表于 2021-6-8 11:00
re.findall返回的是一个列表
就是第一个元素

谢谢!!!
页: [1]
查看完整版本: 求奥迪官方经销商相关信息python爬虫代码