百度新闻爬虫搜索引擎实战---爬虫篇(1)

本文详细介绍了如何使用Python爬取百度新闻的链接。通过分析浏览器网络请求,发现动态加载的内容,并构造相似请求获取JSON数据。通过解析JSON,成功获取到各个模块的新闻链接。
摘要由CSDN通过智能技术生成

爬虫部分

首先,我们得爬取百度新闻的信息。
爬虫分为两部分:

  1. 获取新闻链接
  2. 通过链接爬取新闻信息

新闻链接爬取(1)

1.获取新闻链接

1.1 分析请求

打开chrome浏览器,输入百度新闻链接,按F12打开开发者工具,依次点击Network->Doc,再刷新一次网页,效果如下:
开发者工具

我们看到了所有返回doc的请求。接着,我们点击Preview选项卡:
Preview选项卡
通过预览,我们可以看到这个请求热点要闻、热搜新闻词和百家号三个模块的信息,这些蓝色的链接就是我们要的新闻链接。

点击Headers选项,我们可以看到请求的构造:
请求的构造
很好,我们现在就可以通过构造类似请求来获取到热点要闻、热搜新闻词和百家号三个模块的信息了。

构造请求,获取相应,解析html。

但是,事情并不简单。我们滚动页面:
国内新闻
国际新闻
娱乐新闻
我们发现还有一些模块并不在我们找到的那个请求中。

我们判断,这些内容是在我们滚动页面时通过动态加载上去的。

点击XHR选项卡,我们找到了一些线索:
XHR
我们发现这些请求都带着一个 id 属性,而这些属性的中文恰巧对应我们看到的那个模块的名字。

我们看看第一个xhr类型请求:
在这里插入图片描述
它比我们找到的第一个请求多了一个Query String Parameters 属性,id表示模块名,t表示时间,ajax表示返回类型。

在这里插入图片描述

这个时间如果用 ms 表示49年多,而计算器时间都是从1970年开始算起,所以这个数字表示的是ms。

看完了请求的结构,我们可以看看服务器相应的内容了
在这里插入图片描述
这个请求返回了一个json 结构数据,新闻链接就放在键值对内。
在这里插入图片描述
除了当地新闻模块,其他模块的请求都返回了一个html,新闻链接放在html中。值得注意的是这些模块的请求的Query String Parameters 属性中没有ajax键。

1.2 构造请求

我们暂时放下第一个请求。

我们首先实现返回json数据的请求:

import requests
import json
url = 'http://news.baidu.com/widget?id=LocalNews&ajax=json&t=1565742671236'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,appli
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值