当前位置: 首页 > article >正文

爬虫案例——网易新闻数据的爬取

案例需求:

1.爬取该新闻网站——(网易新闻)的数据,包括标题和链接

2.爬取所有数据(翻页参数)

3.利用jsonpath解析数据

分析:

该网站属于异步加载网站——直接网页中拿不到,需要借助fidder抓包工具拿取

可以看到第一页请求网址

https://news.163.com/special/cm_yaowen20200213/?callback=data_callback

6a92f0e00544494d8c21cf6b292dd5b6.png

第二页请求网址

https://news.163.com/special/cm_yaowen20200213_02/?callback=data_callback

4dc35985765e4390b31a2f426e9401c3.png

第五页(最后一页)请求网址:

https://news.163.com/special/cm_yaowen20200213_05/?callback=data_callback

2b51c098461745cd9e30bd5993d62358.png

所以翻页代码如下:

首页地址为第一页地址

for i in range(2,6):
    print('==========', '当前是第{}页'.format(i))
    page_url = 'https://news.163.com/special/cm_yaowen20200213_0{}/?callback=data_callback'.format(i)

利用josnpath解析数据

cd754152e4124f5d8cae70ca625e3d5b.png

因为该网页不是常规的josn源码数据,所以需要进行一些处理

text_data=data.split('data_callback(')[1]
# print(text_data)
text_data1 = text_data.split(')')[0]
# print(text_data1)
json_data = json.loads(text_data1)
title = jsonpath(json_data,'$..title')
url = jsonpath(json_data,'$..docurl')

处理解析数据

for i,j in zip(title,url):
    print(i)
    print(j)
    print('=======================================')

示例代码:

import requests
from jsonpath import jsonpath
import json
def get_data(url):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36'
    }
    r = requests.get(url,headers=headers)
    # print(r.text)
    return r.text
    # print(r.text)
    # print(r.json())
def parse_data(data):
    text_data=data.split('data_callback(')[1]
    # print(text_data)
    text_data1 = text_data.split(')')[0]
    # print(text_data1)
    json_data = json.loads(text_data1)
    title = jsonpath(json_data,'$..title')
    url = jsonpath(json_data,'$..docurl')
    for i,j in zip(title,url):
        print(i)
        print(j)
        print('=======================================')
    # print(title)
    # print(url)
if __name__ == '__main__':
    url = "https://news.163.com/special/cm_yaowen20200213/?callback=data_callback "
    # h = get_data()
    # parse_data(h)
    for i in range(2,6):
        print('==========', '当前是第{}页'.format(i))
        page_url = 'https://news.163.com/special/cm_yaowen20200213_0{}/?callback=data_callback'.format(i)
        h = get_data(page_url)
        parse_data(h)

6fe1a5bc51994e42a2d68a1c2185b90f.png

 


http://www.kler.cn/news/353645.html

相关文章:

  • 【数据结构】宜宾大学-计院-实验三
  • 【Linux 从基础到进阶】防止数据泄露的策略与工具
  • 前端开发攻略---取消已经发出但是还未响应的网络请求
  • 文心智能体 | AI大师工坊 | 【超省钱小助手】智能体开发经验分享
  • Vidmore Screen Recorde 2.0.20 学习 体验 不错!
  • 【VUE】Vue2中 v-model 的原理
  • 使用 Bash 脚本实现交互式用户输入(参数选择)
  • vue3基础入门以及常用api使用
  • 视频智能分析平台LiteAIServer摄像机视频分析软件下载水土识别算法方案
  • 爬虫post收尾以及cookie加代理
  • BWA-mem Smith-Waterman 算法
  • 【VUE】Vue2中如何监听(检测)对象或者数组某个属性的变化
  • 第七课:Python学习之算数运算符
  • 强化学习之DQN算法
  • yocto编辑软件包-devtool的使用方法
  • 微服务中的负载均衡算法与策略深度解析
  • k8s--二进制包部署及常见报错解决方法
  • 请用python写一个小程序,把浏览器中打开的页面设置为深色模式
  • [LeetCode] 面试题01.02 判定是否互为字符重拍
  • 代码随想录 -- 贪心 -- 跳跃游戏