爬取头条热榜 通过分析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')

相关推荐

  1. 第5章 Ajax数据

    2024-06-07 15:36:01       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 15:36:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 15:36:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 15:36:01       87 阅读
  4. Python语言-面向对象

    2024-06-07 15:36:01       96 阅读

热门阅读

  1. DALL-E 2之学习心得

    2024-06-07 15:36:01       29 阅读
  2. python如何提取html中所有中文

    2024-06-07 15:36:01       25 阅读
  3. module ‘sys‘ has no attribute ‘setdefaultencoding‘

    2024-06-07 15:36:01       28 阅读
  4. linux系统登录达梦数据库

    2024-06-07 15:36:01       25 阅读
  5. 【Qt】styleSheet设置

    2024-06-07 15:36:01       20 阅读
  6. centos使用docker快速安装nginx

    2024-06-07 15:36:01       32 阅读
  7. 8255A-LED

    2024-06-07 15:36:01       20 阅读
  8. SHA256计算原理

    2024-06-07 15:36:01       31 阅读
  9. HTML5 Canvas 绘图教程一

    2024-06-07 15:36:01       32 阅读
  10. oslo_rootwrap学习小结

    2024-06-07 15:36:01       29 阅读
  11. LeetCode102. 二叉树的层序遍历

    2024-06-07 15:36:01       25 阅读
  12. 好用的图片素材网

    2024-06-07 15:36:01       29 阅读