网页抓取数据百度百科( 一个介绍一个爬取动态网页的超简单的一个小demo)

优采云 发布时间: 2022-04-12 03:28

  网页抓取数据百度百科(

一个介绍一个爬取动态网页的超简单的一个小demo)

  

  

  一、 分析网页结构

  前几篇文章介绍了传统静态界面的爬取。这次博主介绍了一个超级简单的爬取动态网页的小demo。

  

  说起动态网页,你对它了解多少?

  不知道动态网页的,博主给个链接,可以看百度百科_百度百科动态网页的详细解析以及小马福静态页和动态页的区别

  

  不要怪博主没有解释清楚,因为博主本人对动态网页的概念也不是很了解。当博主整理自己的想法时,博主会专门写一篇博文——。-

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

  ,让我们开始进入正题。

  本篇博文以高德地图开头:

  

  打开后发现里面有一堆div标签,但是没有我们需要的数据。这时候我们就可以判断是动态网页了。这时候,我们需要找到一个接口

  

  

  点击网络选项卡,我们可以看到网页向服务器发送了很多请求,数据很多,查找时间太长了

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

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

  然后我们就可以开始在XHR类型下一一搜索,找到如下数据

  

  通过查看标头获取 URL

  

  打开后发现是这两天的天气情况。

  

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

  ,找到了json数据,我们对比一下看看是不是我们要找的

  

  通过比较,数据完全对应,这意味着我们已经获得了数据。

  二、获取相关网址

  '''

查询当前地点天气的url:https://www.amap.com/service/cityList?version=2020101417

各城市对应code的url:https://www.amap.com/service/weather?adcode=410700

备注:这两个url可以从Network中查看到

'''

123456

  

  ,我们已经获取了相关的URL,下面是具体的代码实现。至于怎么做,

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

  

  三、代码实现

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

  3.1 查询所有城市名称和数字

  先爬取网页,伪装成浏览器,添加header访问数据库地址,防止被识别和拦截。

  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)

12345678910

  

  得到我们想要的数据后,我们可以通过搜索发现cityByLetter中的数字和名字是我们需要的,然后我们就可以设置了。

  

   if "data" in content:

cityByLetter = content["data"]["cityByLetter"]

for k,v in cityByLetter.items():

city.extend(v)

return city

12345

  

  3.2 根据号码查询天气

  得到号码和名字,下面一定要查天气!

  先看界面

  

  通过上图可以确定最高温度、最低温度等。然后使用它进行数据爬取。

  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)

12345678

  

  ,我们的愿景已经实现。

  

  四、完整代码

  # 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)

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

  五、保存结果

  

  

  美好的日子总是短暂的。虽然我想继续和你聊天,但是这篇博文已经结束了。如果还不够好玩,别着急,我们下期再见!

  PS:如果不能解决问题,可以点击下方链接自行获取

  Python免费学习资料及*敏*感*词*流答案点击加入

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线