由于瓜子二手车网站的城市列表在网页源代码中无法获取,这是自定义的一个获取城市方法,仅供参考!

由于瓜子二手车网站的城市列表在网页源代码中无法获取,这是自定义的一个获取城市方法,仅供参考!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import re
import json
# 通过execj解析js
import execjs
import requests
from lxml import etree
 
 
def search_city(response_second_text):
    """
    由于瓜子二手车网站的城市列表在网页源代码中无法获取,这是自定义的一个获取城市方法
    :param response_second_text:第二次请求得到的源代码
    :return:城市列表(包含城市的拼音和中文名)
    """
    guazi_html = etree.HTML(response_second_text)
    script_js = guazi_html.xpath("//script[3]/text()")[0]
    city_search = re.compile(r'({.*?});')
    city = city_search.findall(script_js)
    # cityLeft获取城市的中文和英文名
    cityLeft = city[0]
    # A_N大写字母
    A_N = [chr(i) for in range(6578)]
    city_list = []
    for in A_N:
        try:
            city_left = json.loads(cityLeft)[i]
            for cityleft in city_left:
                # 城市拼音名
                E_name = cityleft["domain"]
                # 城市中文名
                C_name = cityleft["name"]
                cityleft_touple = (E_name, C_name)
                city_list.append(cityleft_touple)
        except:
            # 没有I开头的城市,捕获异常不用处理
            pass
    # cityRight获取城市的中文和英文名
    cityRight = city[1]
    M_Z = [chr(i) for in range(7891)]
    for in M_Z:
        try:
            city_right = json.loads(cityRight)[i]
            for cityright in city_right:
                # 城市拼音名
                E_name = cityright["domain"]
                # 城市中文名
                C_name = cityright["name"]
                cityright_touple = (E_name, C_name)
                city_list.append(cityright_touple)
        except:
            # 没有O、U、V开头的城市,捕获异常不用处理
            pass
    return city_list
 # 获取城市名称
response_second_text = response_second.text
city_list = search_city(response_second_text)
print(city_list)


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
老中医学编程 2019-10-07 23:34:12

这段js里面已经包含所有的城市名称,且是json数据,直接用json.loads方法就可以解析出城市名称了。

city_search = re.compile(r'{"id":(.*?),"domain":"(.*?)","name":"(.*?)","firstC":"\S","active":false}')

city_list = city_search.findall(response_second.text)

for city in city_list:

    print(json.loads(f'"{city[2]}"'))

好帮手乔木 2019-08-23 19:20:47

同学你好:

感谢这位同学提供新的方法去获取城市信息,其他的同学可以借鉴学习。

学习愉快^_^。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
4.入门主流框架Scrapy与爬虫项目实战
  • 参与学习           人
  • 提交作业       107    份
  • 解答问题       1672    个

Python最广为人知的应用就是爬虫了,有趣且酷的爬虫技能并没有那么遥远,本阶段带你学会利用主流Scrapy框架完成爬取招聘网站和二手车网站的项目实战。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码