爬取头条热榜 通过分析Ajax

项目效果   

        爬取头条热榜信息,将其保存到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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值