如何抓取网页数据(一个爬取动态网页的超简单的一个小demo了解多少 )
优采云 发布时间: 2021-12-30 00:25如何抓取网页数据(一个爬取动态网页的超简单的一个小demo了解多少
)
大家好,我是大智
这一次,我将介绍一个超级简单的抓取动态网页的演示。
说起动态网页,你了解多少?
简单的说,要获取静态网页的网页数据,只需要将网页的url地址发送到服务器,而动态网页的数据存储在后端数据库中。所以要获取动态网页的网页数据,我们需要向服务器发送请求文件的URL地址,而不是网页的URL地址。
好的,让我们进入下面的主题。
一、 分析网页结构
这篇博文将用高德地图进行扩展:
打开后发现里面有一堆div标签,但是没有我们需要的数据。这时候我们就可以确定它是一个动态网页。这时候我们需要找到一个接口
点击网络选项卡,可以看到网页向服务器发送了大量请求,数据量很大,查找时间过长
我们点击XHR这个分类,可以减少很多不必要的文件,节省很多时间。
XHR 类型是通过 XMLHttpRequest 方法发送的请求。它可以在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下更新网页某一部分的内容。换句话说,从数据库请求然后接收的数据是XHR类型的
然后我们就可以在XHR类型下开始一一搜索了,找到如下数据
通过查看Headers获取URL
打开一看,发现是这两天的天气。
打开后,我们可以看到上面的情况,这是一个json格式的文件。然后,它的数据信息以字典的形式存储,数据存储在“data”的键值中。
ok,找到json数据,对比一下,看看是不是我们要找的
通过对比,数据完全对应,这意味着我们得到了数据。
二、获取相关网址
'''
ok,我们拿到了相关的网址,下面是具体的代码实现。至于如何实现,
我们知道可以使用 response.json() 将 json 数据转换为字典,然后可以对字典进行操作。
三、代码实现
知道数据的位置后,我们开始编写代码。
3.1 查询所有城市名称和号码
先抓取网页,冒充浏览器,通过添加header访问数据库地址,防止被识别后被拦截。
url_city = "https://www.amap.com/service/cityList?version=202092419"
得到我们想要的数据后,通过搜索可以发现cityByLetter中的number和name就是我们需要的,然后就可以记录下来了。
if "data" in content:
3.2 根据序号查询天气
拿到号码和名字后,下面绝对是查天气啦!
先看界面
通过上图可以确定最高温度、最低温度等。然后使用它来抓取数据。
url_weather = "https://www.amap.com/service/weather?adcode={}"
好了,我们的愿景已经实现了。
四、完整代码
# encoding: utf-8
五、保存结果