爬虫入门经典(五) | 简单一文教你如何爬取高德地图

爬虫入门经典(五) | 简单一文教你如何爬取高德地图  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/。PS:由于现在越来越多的人未经本人同意直接爬取博主本人.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/
1

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!


2


推荐

31
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
30

一、 分析网页结构

以往几篇都是介绍的传统的静态界面的爬取,这次博主介绍一个爬取动态网页的超简单的一个小demo
3
说到动态网页,你对它了解多少呢?

如果对动态网页不认识的童鞋,博主在此给出链接,可以看百度百科的详细解析动态网页_百度百科以及小马夫的静态页面和动态页面的区别

4
不要怪博主没有进行讲解,因为博主本人对与动态网页的概念也不是太过了解。等到博主整理好思绪的时候,博主会专门写一篇博文的 -。-

简单来说,要获取静态网页的网页数据只需要给服务器发送该网页url地址就行,而动态网页的数据因为是存储在后端的数据库里。所以要获取动态网页的网页数据,我们需要向服务器发送请求文件的url地址,而不是该网页的url地址。

?,下面开始进入正题。

本篇博文就以高德地图展开:https://www.amap.com/
5
在打开后,我们发现有一堆div标签,但是并没有我们需要的数据,这个时候就可以判定其为动态网页,这个时候,我们就需要找接口
8
6
点击网络标签,我们可以看到网页向服务器发送了很多请求,数据很多,找起来太费时间

我们点击XHR分类,可以减少很多不必要的文件,省下很多时间。

XHR类型即通过XMLHttpRequest方法发送的请求,它可以在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新。也就是说,向数据库请求然后得到响应的数据是XHR类型的

然后我们就可以在XHR类型下开始一个个找,找到了如下的数据
7
通过查看Headers获得URL
9
打开之后,我们发现其为近两天的天气情况。
10

打开后我们可以看到上面的情况,这是个json格式的文件。然后,它的数据信息是以字典的形式来保存的,而数据是都保存在“data”这个键值里面。

?,找到了json数据,我们来对比下看是否是我们找的东西
11
通过对比,数据正好对应,那就说明咱们已经拿到数据了。

二、拿到相关网址

''' 查询当前地点天气的url:https://www.amap.com/service/cityList?version=2020101417 各城市对应code的url:https://www.amap.com/service/weather?adcode=410700 备注:这两个url可以从Network中查看到 '''

12
?,相关网址我们已经拿到了,下面就是具体的代码实现了。至于怎么实现,

我们知道json数据可以使用response.json()转字典,然后操作字典。
13

三、代码实现

知道了数据的位置后,我们开始来写代码。

3.1 查询所有城市名称和编号

先抓取网页,通过添加headers来伪装成浏览器来对数据库地址进行访问,防止被识别后拦截。

url_city = "https://www.amap.com/service/cityList?version=202092419"

headers = { 
   
    "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}

city = []
response = requests.get(url=url_city, headers=headers)
content = response.json()
print(content)

14
得到我们想要的数据之后,我们通过查找可以发现cityByLetter里的编号和名称是我们需要的,那么我们就可以盘它了。
15

    if "data" in content:
        cityByLetter = content["data"]["cityByLetter"]
        for k,v in cityByLetter.items():
            city.extend(v)
    return city

15

3.2 根据编号查询天气

得到了编号和名称,下面肯定就是查询天气呀!

先来看接口
16
通过上图,可以确定最高温度,最低温度等内容。那么就以此来进行数据爬取。

url_weather = "https://www.amap.com/service/weather?adcode={}"

response = requests.get(url=url_weather.format(adcode), headers=headers)
content = response.json()
item["weather_name"] = content["data"]["data"][0]["forecast_data"][0]["weather_name"]
item["min_temp"] = content["data"]["data"][0]["forecast_data"][0]["min_temp"]
item["max_temp"] = content["data"]["data"][0]["forecast_data"][0]["max_temp"]
print(item)

17

?,我们的设想已经实现了。
20

四、完整代码

# encoding: utf-8
''' @author 李华鑫 @create 2020-10-06 19:46 Mycsdn:https://buwenbuhuo.blog.csdn.net/ @contact: 459804692@qq.com @software: Pycharm @file: 高德地图_每个城市的天气.py @Version:1.0 '''
import requests
url_city = "https://www.amap.com/service/cityList?version=202092419"
url_weather = "https://www.amap.com/service/weather?adcode={}"
headers = { 

"user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
def get_city():
"""查询所有城市名称和编号"""
city = []
response = requests.get(url=url_city, headers=headers)
content = response.json()
if "data" in content:
cityByLetter = content["data"]["cityByLetter"]
for k, v in cityByLetter.items():
city.extend(v)
return city
def get_weather(adcode, name):
"""根据编号查询天气"""
item = { 
}
item["adcode"] = str(adcode)
item["name"] = name
response = requests.get(url=url_weather.format(adcode), headers=headers)
content = response.json()
item["weather_name"] = content["data"]["data"][0]["forecast_data"][0]["weather_name"]
item["min_temp"] = content["data"]["data"][0]["forecast_data"][0]["min_temp"]
item["max_temp"] = content["data"]["data"][0]["forecast_data"][0]["max_temp"]
return item
def save(item):
"""保存"""
print(item)
with open("./weather.txt","a",encoding="utf-8") as file:
file.write(",".join(item.values()))
file.write("\n")
if __name__ == '__main__':
city_list = get_city()
for city in city_list:
item = get_weather(city["adcode"],city["name"])
save(item)

五、保存结果

18
19

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


21

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

22
23

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159499.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 计算机能不能升级固态硬盘,老电脑升级固态硬盘真的能变快吗?「建议收藏」

    计算机能不能升级固态硬盘,老电脑升级固态硬盘真的能变快吗?「建议收藏」怎样去DIY一台主机呢?它可以满足自己的工作、游戏需求,还要颜值高、噪音小、最重要的是价格要便宜,质量要好。本系列为让装机零基础的朋友可以轻松了解,所以尽量避免专业参数。(每周二更新)老电脑升级固态硬盘是第一选择,然而很多同学购买了固态硬盘,却发现没有想象的那么快,用测速工具测试后发现读写速度不能达到标称,是买到假货了吗?其实不然,固态硬盘读写速度受很多因素影响,本期《装机不求人》就和大家讲解…

  • 较完整的 bean生命周期[通俗易懂]

    较完整的 bean生命周期[通俗易懂]首先需要说明的是,Bean的生命周期主要指的是singletonbean,标签的scope默认就是singleton。对prototypebean来说,当用户getBean获得prototypebean的实例后,IOC容器就不再对当前实例进行管理,而是把管理权交由用户,此后再getBean生成的是新的实例。普通JavaBean和SpringBean普通java对象就是new出来,然后不再使用的时候通过垃圾回收机制进行回收; 而springBean是由spring容器来控制的,并且..

  • 基于51单片机的毕业设计题目_单片机全自动洗衣机毕业设计

    基于51单片机的毕业设计题目_单片机全自动洗衣机毕业设计仿真链接:基于单片机的智能衣柜设计–仿真设计软件安装:Keil:点击下载 Proteus:点击下载 AD:点击下载 Visio:点击下载 烧录软件:点击下载设计简介:本设计是基于单片机的智能衣柜设计,主要实现以下功能:可实现通过DHT11测量衣柜的温湿度,并可自动进行除湿 可实现通过DS1302获取当前时间,并可通过按键调整 可实现通过按键设置紫外线消毒的开始时间和结束时间 可实现通过按键模拟打开衣柜或关闭衣柜 可实现通过LCD1602显示衣柜内的温湿度、衣柜的开关状态

  • Python 冒泡排序_python

    Python 冒泡排序_python要学习冒泡排序必须知道它的原理:冒泡排序算法的原理如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。例子:1,2,3,4,5,6就拿1到6来举例子吧!这里面有n个数字,你要对其进…

    2022年10月16日
  • 简述python变量的命名规则_Python 变量命名规则

    简述python变量的命名规则_Python 变量命名规则Python变量命名规则python是动态编译语言,不用事先声明类型,赋值即声明。1.要具有描述性2.变量名只能是:数字,字母组成,不可以是空格或特殊字符,如:(#?。,¥$*~!&)等3.不能是中文4.不能以数字开头5.保留字符是不能被使用,如下:[‘and’,’as’,’assert’,’break’,’class’,’continue’,’def’,’del’,’eli…

  • 基于flask框架的高校舆情分析系统[通俗易懂]

    基于flask框架的高校舆情分析系统[通俗易懂]系统分析:高校舆情分析拟实现如下功能,采集微博、贴吧、学校官网的舆情信息,对这些舆情进行数据分析、情感分析,提取关键词,生成词云分析,情感分析图,实时监测舆情动态。系统设计:前端:采用layui+echarts实现图表的展示,数据分析的结果后端:采用requests实现数据的采集,利用flask+mysql搭建web网站框架,利用机器学习的中文分词、情感分析等技术生成词云分析、关键词提取、情感分析等功能系统难点:采集微博、贴吧的数据,利用机器学习的知识生成词云分析、情感分析系统实现如

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号