一、 分析网页结构
本篇博文就以高德地图展开:https://www.amap.com/
在打开后,我们发现有一堆div
标签,但是并没有我们需要的数据,这个时候就可以判定其为动态网页,这个时候,我们就需要找接口
点击网络标签,我们可以看到网页向服务器发送了很多请求,数据很多,找起来太费时间
我们点击XHR
分类,可以减少很多不必要的文件,省下很多时间。
XHR类型即通过XMLHttpRequest方法发送的请求,它可以在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新。也就是说,向数据库请求然后得到响应的数据是XHR类型的
然后我们就可以在XHR类型下开始一个个找,找到了如下的数据
通过查看Headers
获得URL
打开之后,我们发现其为近两天的天气情况。
打开后我们可以看到上面的情况,这是个json
格式的文件。然后,它的数据信息是以字典的形式来保存的,而数据是都保存在“data
”这个键值里面。
ok找到了json
数据,我们来对比下看是否是我们找的东西
通过对比,数据正好对应,那就说明咱们已经拿到数据了。
码字不易废话两句:有需要学习资料的或者有技术问题交流“点击”即可
二、拿到相关网址
查询当前地点天气的url:https://www.amap.com/service/cityList?version=2020101417
各城市对应code的url:https://www.amap.com/service/weather?adcode=410700
备注:这两个url可以从Network中查看到
关网址我们已经拿到了,下面就是具体的代码实现了。至于怎么实现,
我们知道json
数据可以使用response.json()
转字典,然后操作字典。
三、代码实现
知道了数据的位置后,我们开始来写代码。
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