高校新闻抓取分析之百度新闻篇---数据抓取
高校新闻抓取分析之百度新闻篇—数据抓取
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">
•
<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">澎湃新闻 7小时前 <a href="/ns?word=title%3A%28%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A6%29+cont:1782421700&same=2&cl=1&tn=newstitle&rn=30&fm=sd" class="c-more_link" data-click="{'fm':'sd'}">查看更多相关新闻>></a>
</div>
</div>
<div class="result title" id="2">
•
<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">人民网四川站 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-Agent
,Host
,Accept
参数,所以请求时带上这个几个参数。
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)
总结
- 通过分析百度新闻URL链接,大致弄个清楚URL参数含义及构造方法。
- 通过分析请求头,大致摸清请求头的构造。
- 基于以上成果完成了百度新闻的请求构造及成功请求数据。
高校新闻抓取分析之百度新闻篇---数据抓取相关推荐
- 高校新闻抓取分析之百度新闻篇---数据清洗解析
高校新闻抓取分析之百度新闻篇-数据清洗解析 tips: 本文代码使用python3编写 代码仓库 使用re抓取解析数据 前言 在上一篇文章中,成功构建URL并获取到高校新闻数据. 现在将对请求回来的数 ...
- Java抓包分析四(基于jnetpcap进行抓包)——分析Http请求数据包
在上篇文章中Java抓包分析三(基于jnetpcap进行抓包)--抓取Http请求数据包,我们讲解了TCP三次握手的过程和如何抓取Http数据包,但是我们并没有进行一个数据分析,接下来这篇文章我们将要 ...
- python爬取二手房信息_刚刚接触PythonR?教你爬取分析赶集网北京二手房数据(附详细代码)...
原标题:刚刚接触Python&R?教你爬取分析赶集网北京二手房数据(附详细代码) 源 /数据森麟文 /徐涛 前言: 本文主要分为两部分:Python爬取赶集网北京二手房数据&R对爬取的 ...
- python爬取分析超级大乐透历史开奖数据
python爬取分析超级大乐透历史开奖数据 博主作为爬虫初学者,本次使用了requests和beautifulsoup库进行数据的爬取 爬取网站:http://datachart.500.com/dl ...
- 美国服务器百度抓取耗时不稳定,百度或者其他搜索引擎抓取频次快慢的因素,还会受什么有影响?...
什么是搜索引擎的抓取频次? 抓取频次是搜索引擎在单位时间内(天级)对网站服务器抓取的总次数. 对于百度搜索引擎来说非常智能: 如果百度搜索引擎对站点的抓取频次过高,就很有可能造成服务器不稳定(相对而言 ...
- 爬虫Spider 05 - 代理参数-proxies | 控制台抓包 | requests.post() | 动态加载数据抓取-Ajax
文章目录 Spider 04回顾 requests.get()参数 常见的反爬机制及处理方式 Spider 05笔记 代理参数-proxies **控制台抓包** **requests.post()参 ...
- PythonR爬取分析赶集网北京二手房数据(附详细代码)
本文转载自数据森麟(ID:shujusenlin) 作者介绍:徐涛,19年应届毕业生,专注于珊瑚礁研究,喜欢用R各种清洗数据. 知乎:parkson 如何挑战百万年薪的人工智能! https://ed ...
- Wireshark抓包分析TCP连接、发送数据与断开过程
准备工具: 1. 两台连接到同个局域网的电脑,或者虚拟机; 2. 在其中一台电脑安装Wireshark; 3. 在两台电脑上面都有TCP&UDP测试工具软件 TCP连接建立过程(三次握手): ...
- 抓包分析以太网帧和IP数据包,头部那么多东东用来干啥的,扫盲篇
目录 抓包过程 以太网帧(也叫MAC帧)首部分析 IP数据包首部分析 抓包过程 使用了 Wireshark 进行抓包,用两个最常用的 curl 和 ping 命令来演示抓包情况,开启抓包. ## 先访 ...
最新文章
- ”该证书已被签发机构吊销“错误解决方案
- ubuntu11.04中如何像其他版本一样快速回到桌面
- android 组件 线程,Android UI线程和非UI线程
- oracle建job
- python自动化测试课程体系_零基础学习python自动化测试 - 课程
- Linux系统调用--getrusage函数详解
- Caffe源码解析2:SycedMem
- 法定节假日违规组织培训,51talk被通报批评整改不到位
- 百度app不支持popstate_这一次谷歌很强硬,从现在起你的 App 再不支持,将拒绝上架!...
- A joke about regular expression
- 蓝桥杯、PAT、CCF CSP、团体程序设计天梯赛、传智杯、全国高校计算机能力挑战赛、软考等大学生编程比赛/考试介绍
- Xshell官网登陆及软件下载,以及百度网盘免费提速
- 2021-11-11 VirtualBox 安装windows 不全屏显示的解决方法
- php引用字体,php – 使用imagettftext()时,如何处理字体文件不支持的字符?
- 东芝L630-08R装机拆机流程
- 【LOJ6570】毛毛虫计数
- creo6.0安装教程
- 飞腾CPU体系结构之位序
- Android中Kotlin面试问题讲解
- ORA-12737:Instant Client Light:unsupported server character set ZHS16GBK
热门文章
- description标签如何正确使用?
- html 单元格拆分及合并,表格合并和拆分.html
- 计算机显示器模糊,电脑显示器模糊的原因和解决方法【图文】
- 一个工程师对潘多拉开发板的使用体验
- 想要用Python写爬虫但是BeautifulSoup库出锅肿么办?
- 蚂蚁开放平台开发者专场(上海站)欢迎参加!
- h5获取浏览器的相机和摄像头权限
- android 心跳 简书,如何高效维持网络长连接:手把手教你实现 自适应的心跳保活机制...
- git FreshMan指南,五分钟上手(图解)
- vue父子组件及非父子组件之间的传值