高校新闻抓取分析之百度新闻篇—数据抓取

tips:

  • 本文代码使用python3编写
  • 代码仓库
  • 使用urllib抓取数据

百度新闻网页界面分析

在我读大学的时候(18年前),百度新闻还能基于新闻标题或者新闻全文搜索新闻。后面某一天百度新闻的改版,新闻栏目下线,资讯上线。原来的新闻界面找不到了,不过经过一番苦寻,还是找出来了。

1. 数据地址

  • 新闻地址:https://news.baidu.com/ns?word=title:(北京大学)&pn=0&cl=2&ct=0&tn=newstitle&rn=20&ie=utf-8&bt=0&et=0
  • 尝试搜索北京大学

2. URL分析

序号 参数 备注
1 tn newstitle 基于新闻标题搜索
2 word title:(北京大学) 搜索关键字
3 pn 0 当前页面数据起始位置
4 rn 20 当前页面新闻数
5 ie utf-8 编码
6 bt 0 未知
6 et 0 未知
6 cl 2 未知
6 ct 0 未知

3.Html分析

废话不多说,直接上截图:

提取的字段:新闻标题,新闻来源,新闻时间,更多新闻,在Html中其格式都是比较规整。新闻部分html结构如下:

<div class="result title" id="1">
•&nbsp;
<h3 class="c-title"><a href="http://www.thepaper.cn/newsDetail_forward_8438609" data-click="{'f0':'77A717EA','f1':'9F63F1E4','f2':'4CA6DE6E','f3':'54E5243F','t':'1595752997'}" target="_blank">中国科协“老科学家学术成长资料采集工程”<em>北京大学</em>联合采集启动...</a>
</h3>
<div class="c-title-author">澎湃新闻&nbsp;&nbsp;               7小时前&nbsp;&nbsp;<a href="/ns?word=title%3A%28%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%29+cont:1782421700&amp;same=2&amp;cl=1&amp;tn=newstitle&amp;rn=30&amp;fm=sd" class="c-more_link" data-click="{'fm':'sd'}">查看更多相关新闻&gt;&gt;</a>
</div>
</div>
<div class="result title" id="2">
•&nbsp;
<h3 class="c-title"><a href="http://sc.people.com.cn/n2/2020/0726/c345509-34183157.html" data-click="{'f0':'77A717EA','f1':'9F63F1E4','f2':'4CA6DD6E','f3':'54E5243F','t':'1595752997'}" target="_blank"><em>北京大学</em>、清华大学等17所高校在川招生行程安排和咨询地址、电话...</a>
</h3>
<div class="c-title-author">人民网四川站&nbsp;&nbsp;             9小时前</div>
</div>

实现简单的抓取

1. 构建URL

前面分析了url链接的参数信息,只需要根据关键字和页数来构建url即可。

import urllib.parsekey_word = '北京大学'
# 页码
page = 1
url_query_parse = {"tn": "newstitle","word": "title:({})".format(key_word),"pn": (page- 1) * 20,# 控制页码"rn": 20,"ie": 'utf-8','bt': 0,'et': 0,'cl': 2,'ct': 0,
}
# 生成url参数
url_query_parse = urllib.parse.urlencode(url_query_parse)
print(url_query_parse)
# word=title%3A%28%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%29&pn=0&cl=2&ct=0&tn=newstitle&rn=20&ie=utf-8&bt=0&et=0
url = 'https://news.baidu.com/ns?{}'.format(url_query_parse)
print(url)
# https://news.baidu.com/ns?word=title%3A%28%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%29&pn=0&cl=2&ct=0&tn=newstitle&rn=20&ie=utf-8&bt=0&et=0

2. 构建请求头

一般来说,抓取数据需要尽量模仿正常的人访问数据,防止被数据来源网站ban了。所以尽可能模仿浏览器行为。比如请求带请求头,控制请求频率,更换请求IP等。当然,数据采集还是需要准守一定的行业规则,不能把来源网站搞死了。那样大家都没得玩。

经过试验,百度新闻主要检查User-AgentHostAccept参数,所以请求时带上这个几个参数。

import random
ua_list = [
'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',
]headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
'Host': 'news.baidu.com',
}# 随机设置User-Agent
ua = random.choice(ua_list)
headers.update({"User-Agent": ua})
print(headers)#{#"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
#'Host': 'news.baidu.com',
# "User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
#}

3. 请求数据

首先需要构建请求,然后请求内容,设置超时时间等。请求这部分内容不清楚的话就网站搜索,现在有很多教程都有讲解。拿到请求内容后需要进行解码。

import urllib.request
req = urllib.request.Request(url=url, headers=headers, method='GET')
html = urllib.request.urlopen(req, timeout=5).read().decode('utf-8')
print(html)

4. 完整代码

到这来就完成了爬虫的第一部分,请求数据。当然请求这部分内容还可以再封装函数及优化。

import random
import urllib.parse
import urllib.requestkey_word = '北京大学'
page = 1
url_query_parse = {"tn": "newstitle","word": "title:({})".format(key_word),"pn": (page - 1) * 20,"rn": 20,"ie": 'utf-8','bt': 0,'et': 0,'cl': 2,'ct': 0,
}
url_query_parse = urllib.parse.urlencode(url_query_parse)
print(url_query_parse)url = 'https://news.baidu.com/ns?{}'.format(url_query_parse)
print(url)ua_list = ['Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',
]headers = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",'Host': 'news.baidu.com',
}# 随机设置User-Agent
ua = random.choice(ua_list)
headers.update({"User-Agent": ua})
print(headers)req = urllib.request.Request(url=url, headers=headers, method='GET')
html = urllib.request.urlopen(req, timeout=5).read().decode('utf-8')
# 保存到本地
print(html)
with open('test.html', 'w', encoding='utf-8') as f:f.write(html)

总结

  1. 通过分析百度新闻URL链接,大致弄个清楚URL参数含义及构造方法。
  2. 通过分析请求头,大致摸清请求头的构造。
  3. 基于以上成果完成了百度新闻的请求构造及成功请求数据。

高校新闻抓取分析之百度新闻篇---数据抓取相关推荐

  1. 高校新闻抓取分析之百度新闻篇---数据清洗解析

    高校新闻抓取分析之百度新闻篇-数据清洗解析 tips: 本文代码使用python3编写 代码仓库 使用re抓取解析数据 前言 在上一篇文章中,成功构建URL并获取到高校新闻数据. 现在将对请求回来的数 ...

  2. Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包

    在上篇文章中Java抓包分析三(基于jnetpcap进行抓包)--抓取Http请求数据包,我们讲解了TCP三次握手的过程和如何抓取Http数据包,但是我们并没有进行一个数据分析,接下来这篇文章我们将要 ...

  3. python爬取二手房信息_刚刚接触PythonR?教你爬取分析赶集网北京二手房数据(附详细代码)...

    原标题:刚刚接触Python&R?教你爬取分析赶集网北京二手房数据(附详细代码) 源 /数据森麟文 /徐涛 前言: 本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的 ...

  4. python爬取分析超级大乐透历史开奖数据

    python爬取分析超级大乐透历史开奖数据 博主作为爬虫初学者,本次使用了requests和beautifulsoup库进行数据的爬取 爬取网站:http://datachart.500.com/dl ...

  5. 美国服务器百度抓取耗时不稳定,百度或者其他搜索引擎抓取频次快慢的因素,还会受什么有影响?...

    什么是搜索引擎的抓取频次? 抓取频次是搜索引擎在单位时间内(天级)对网站服务器抓取的总次数. 对于百度搜索引擎来说非常智能: 如果百度搜索引擎对站点的抓取频次过高,就很有可能造成服务器不稳定(相对而言 ...

  6. 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax

    文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...

  7. PythonR爬取分析赶集网北京二手房数据(附详细代码)

    本文转载自数据森麟(ID:shujusenlin) 作者介绍:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据. 知乎:parkson 如何挑战百万年薪的人工智能! https://ed ...

  8. Wireshark抓包分析TCP连接、发送数据与断开过程

    准备工具: 1. 两台连接到同个局域网的电脑,或者虚拟机; 2. 在其中一台电脑安装Wireshark; 3. 在两台电脑上面都有TCP&UDP测试工具软件 TCP连接建立过程(三次握手): ...

  9. 抓包分析以太网帧和IP数据包,头部那么多东东用来干啥的,扫盲篇

    目录 抓包过程 以太网帧(也叫MAC帧)首部分析 IP数据包首部分析 抓包过程 使用了 Wireshark 进行抓包,用两个最常用的 curl 和 ping 命令来演示抓包情况,开启抓包. ## 先访 ...

最新文章

  1. ”该证书已被签发机构吊销“错误解决方案
  2. ubuntu11.04中如何像其他版本一样快速回到桌面
  3. android 组件 线程,Android UI线程和非UI线程
  4. oracle建job
  5. python自动化测试课程体系_零基础学习python自动化测试 - 课程
  6. Linux系统调用--getrusage函数详解
  7. Caffe源码解析2:SycedMem
  8. 法定节假日违规组织培训,51talk被通报批评整改不到位
  9. 百度app不支持popstate_这一次谷歌很强硬,从现在起你的 App 再不支持,将拒绝上架!...
  10. A joke about regular expression
  11. 蓝桥杯、PAT、CCF CSP、团体程序设计天梯赛、传智杯、全国高校计算机能力挑战赛、软考等大学生编程比赛/考试介绍
  12. Xshell官网登陆及软件下载,以及百度网盘免费提速
  13. 2021-11-11 VirtualBox 安装windows 不全屏显示的解决方法
  14. php引用字体,php – 使用imagettftext()时,如何处理字体文件不支持的字符?
  15. 东芝L630-08R装机拆机流程
  16. 【LOJ6570】毛毛虫计数
  17. creo6.0安装教程
  18. 飞腾CPU体系结构之位序
  19. Android中Kotlin面试问题讲解
  20. ORA-12737:Instant Client Light:unsupported server character set ZHS16GBK

热门文章

  1. description标签如何正确使用?
  2. html 单元格拆分及合并,表格合并和拆分.html
  3. 计算机显示器模糊,电脑显示器模糊的原因和解决方法【图文】
  4. 一个工程师对潘多拉开发板的使用体验
  5. 想要用Python写爬虫但是BeautifulSoup库出锅肿么办?
  6. 蚂蚁开放平台开发者专场(上海站)欢迎参加!
  7. h5获取浏览器的相机和摄像头权限
  8. android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...
  9. git FreshMan指南,五分钟上手(图解)
  10. vue父子组件及非父子组件之间的传值