Python 爬取 百度地图搜索结果

Python 爬取 百度地图搜索结果

第一次发CSDN = =
其实是因为以前实在没实现过什么像样的东西 emmm

*就当是学习记录吧~
还有很多不足,希望大家能在评论区指正呀
大二的小白会继续努力的

主要实现了AJAX网页的数据采集、动态创建文件、数据保存的功能
数据抓取的内容比较简单,只有搜索结果的地区名和相关数~

结果截图:
在这里插入图片描述

在这里插入图片描述
上代码:

import requests,json,time,jsonpath,csv
#from urllib.parse import urlencode

base_url = 'https://map.baidu.com/'
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')
 #jsonpath对Json数据解析


 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('\n按q退出 任意键继续')
        print('✿ ' * 10)
        #特殊符号可以参考:https://blog.csdn.net/qq_25218903/article/details/70212448

        if  m == 'q' :
            break
        else:
            Result.clear()
            Name.clear()

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值