百度新闻爬虫搜索引擎实战---爬虫篇(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
好的,您想要爬取百度新闻网站(http://www.bspider.top/baidunews/)的新闻标题和链接,并将其保存到CSV文件中,以便后续进行分析或比较。这个过程通常涉及以下几个步骤: 1. **网络请求**:首先,使用Python的requests库发送HTTP GET请求获取网页内容。 2. **HTML解析**:利用BeautifulSoup或类似库解析HTML文档,提取出每个新闻标题和对应的链接。 3. **数据结构存储**:将抓取的数据组织成字典或列表形式,其中每一项包含标题(title)和URL(link)。 4. **写入CSV**:使用pandas库将数据写入CSV文件,确保列名按照“标题”、“URL”的顺序排列。 为了满足您的通关标准,需要确保CSV文件的结构与已有的参考CSV文件相似,比如标题在前,URL在后,且没有多余的列。 下面是一个简单的Python脚本示例: ```python import requests from bs4 import BeautifulSoup import pandas as pd # 发送GET请求 response = requests.get('http://www.bspider.top/baidunews/') # 解析HTML soup = BeautifulSoup(response.text, 'html.parser') news_list = soup.find_all('div', class_='news-item') # 假设新闻信息在一个class为"news-item"的div标签中 # 提取数据 data = [] for news in news_list: title = news.h2.a.text # 提取标题 link = news.h2.a['href'] # 提取URL data.append((title, link)) # 创建DataFrame并写入CSV df = pd.DataFrame(data, columns=['标题', 'URL']) df.to_csv('baidu_news.csv', index=False) ``` 完成后,检查生成的CSV文件`baidu_news.csv`是否符合要求,如果相似度足够高,则说明任务完成。记得运行时检查编码等问题,以防乱码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值