python爬取百度地图搜索结果

370阅读 0评论2021-08-13 专注的阿熊
分类:Python/Ruby

import requests,json,time,jsonpath,csv

#from urllib.parse import urlencode

base_url = ''

headers = {

#自己加咯

}

Name = []     #搜索结果中地市名

Result = []   #包含搜索结果的数量

FileName=[]   #文件名(搜索时)

global s,f

f = 0

# 索引—— ——方便动态创立文件名

def getpages(s):

 params = {

#F12  Network 可查

}

 page = requests.get(base_url, headers = headers,params = params)

 items = json.loads(page.text)

 #json.loads:  json字符串解码成Python对象

 name = jsonpath.jsonpath(items,"$..name")

 num = jsonpath.jsonpath(items,'$.content[*].num')

 num2 = jsonpath.jsonpath(items,'$.more_city[*].city[*].num')

 #jsonpathJson数据解析

 for na in name:

     if '中国' in na:

         continue

     Name.append(na)

 for n in num:

       Result.append(n)

 for n in num2:

     Result.append(n)

def Specify_Output(n):

    dic = {}

    dic = dict(zip(Name,Result))

    #Name 和  Result合并成字典格式

    Sort = sorted(dic.items(), key=lambda x : x[1], reverse=True)

    #对字典按照key值大小排序,Sort是列表类型

    for i in range(n):

        print(Sort[i])

def save_data():

     file = open((r'D:\Mine\Python\爬虫数据\\'+FileName[f]+'.csv'),'w',encoding='utf-8',newline='')

     # 对爬取的不同数据建立csv文件    两个双斜杠是因为一个'\'表示转义

     writer =  csv.writer(file)

     writer.writerow(('{}'.format(s),''))

     writer.writerow (('城市或地区','相关个数'))

     #使用csv库的时候,要注意只有一个量

     for i in range(len(Name)):

         writer.writerow((Name[i],Result[i]))

     print('数据已保存...')

     file.close()

     print('文件已关闭...')

if __name__ == '__main__':

    while True:

        s = input('您要搜索的是:')

        FileName.append(s)

        #将文件名写入列表,方便后来动态建立csv文件

        time_start = time.time()

        getpages(s)

        time_end = time.time()

        print("数据抓取用时:{:.2f}s".format(time_end - time_start))

        # 爬取数据计时

        print("全国一共有{}个城市和地区有和{}的相关".format(len(Name), s))

        n = eval(input('您要输出按搜索结果数排名前多少的地市?\n(回车输出全部数据)'.format(s)))

        Specify_Output(n)

        print('\n'+'? '*10)

        save_data()

        f += 1

        m = input('\nq退出 任意键继续')

        print('? ' * 10)

        #特殊符号可以参考:https://blog.csdn.net/qq_25218903/article/details/70212448

        if  m == 'q' :

            break

        else:

            Result.clear()

            Name.clear()

上一篇:python做频率统计图 完整版
下一篇:Python 深度学习6:PyTorch 卷积神经网络