项目效果
爬取头条热榜信息,将其保存到JSON文件中去。
结尾附全部代码,可直接运行学习。供自己学习分享,差错之处请指正。
所需准备
(1)请求网页需要用到requests库。
(2)保存JSON文件时要调用json库。
步骤
头条页面热榜信息再我们用requests库直接请求时也可以获得其源代码信息,本项目目的时学习Ajax请求,故使用分析Ajax请求来获取信息,最终将其保存到JSON文件中。
1、分析Ajax,获取所需URL
通过开发者工具中,筛选xhr请求,我们可以看到hot-board字样,可以分析出这个可能是热榜信息,打开预览后,我们发现确实是。故将这个请求的URL作为我们所需要请求的。
# 获取xhr里的URL
base_url = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00f01-HyKHQAAIDAScnAofX7ypPh1izAAJ4ysi0n4XPfB7444ACeTFOQDj9hjC3lzL6udtOfAdqL7eATgVrMUSt1nW1Qb4xQGsqRQzWYVW8mzbN-E06oUQJeUca2kwcvYRO3ykI-a3'
# 构造请求头,模拟浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
2、构造请求,获取返回数据
# 请求网页
reponse = requests.get(base_url, headers=headers)
# 若请求成功
if reponse.status_code == 200:
reponse = reponse.json()
3、分析数据,并将获得数据保存
因为我们再第2步将返回的数据使用json()方法转换为字典,所以我们可以通过键-键值对特性获取信息。
# 遍历data,获取每一个的title
with open('data.json', 'a', encoding = 'utf-8') as file:
for news_dict in reponse['data']:
newsTitle = news_dict['Title']
print(newsTitle)
# indent:缩进字符数 ensure_ascii为是否转码ascii码
file.write(json.dumps(newsTitle, indent=2, ensure_ascii=False) + '\n')
完整代码
import json
import requests
# 爬取头条热榜信息
# 获取xhr里的URL
base_url = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc&_signature=_02B4Z6wo00f01-HyKHQAAIDAScnAofX7ypPh1izAAJ4ysi0n4XPfB7444ACeTFOQDj9hjC3lzL6udtOfAdqL7eATgVrMUSt1nW1Qb4xQGsqRQzWYVW8mzbN-E06oUQJeUca2kwcvYRO3ykI-a3'
# 构造请求头,模拟浏览器
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
}
# 请求网页
reponse = requests.get(base_url, headers=headers)
# 若请求成功
if reponse.status_code == 200:
reponse = reponse.json()
# 遍历data,获取每一个的title
with open('data.json', 'a', encoding = 'utf-8') as file:
for news_dict in reponse['data']:
newsTitle = news_dict['Title']
print(newsTitle)
# indent:缩进字符数 ensure_ascii为是否转码ascii码
file.write(json.dumps(newsTitle, indent=2, ensure_ascii=False) + '\n')