汇总:Python数据采集案例(1):微博热搜榜采集
优采云 发布时间: 2022-11-28 05:15汇总:Python数据采集案例(1):微博热搜榜采集
时间:2020.05.25
目标
本案例通过图文并茂的方式详细介绍了网络请求和分析的方法。目标是通过网络请求获取微博热搜榜前50的关键词,并将结果打印到控制台。
实施过程
总的来说,数据采集爬虫的实现过程包括以下几个步骤:
确定数据所在的Url 执行网页请求并解决请求中的问题 解析网页并获取格式化数据 存储数据(当前案例不需要)
下面我们按照上面的步骤依次完成。
确定数据所在的Url
打开微博热搜榜,即Url为:
首先,我们需要判断目标数据是存在于页面上还是通过Ajax加载的。我们可以在浏览器中右击(推荐Chrome浏览器),选择“查看网页源代码”。
这时浏览器会打开一个新的页面,在Url(网页地址)前加上view-source部分,网页上显示的关键词就是当前网页的源代码.
" />
我们使用快捷键Ctrl+F打开搜索框,在网页源代码中搜索热搜榜页面显示的文字。关键词,表示热搜榜直接在页面加载,不通过Ajax加载。这个时候我们只需要直接请求网页的url就可以获取热搜榜数据了。
网络请求
接下来,我们使用requests模块执行网页请求,并打印请求结果。代码如下:
import requests<br /><br />if __name__ == "__main__":<br /> response = requests.get("https://s.weibo.com/top/summary")<br /> print(response.content.decode())
在打印的内容中,我们再次找到“过仙桥发现北宋古墓”,说明我们的请求成功获取了热搜榜数据,没有问题。
网页分析
再次回到浏览器,右击选择“Inspect”打开浏览器控制台(或者直接使用快捷键F12打开控制台)。
选择元素选择工具。
在元素选择模式下(元素选择工具的小箭头是蓝色的),点击我们需要采集
的信息。
此时,浏览器控制台会导航到目标信息所在的标签。
" />
我们在标签上右击,选择“复制”,然后选择“复制选择器”,复制标签的CSS Selector路径,用于定位当前标签。例如热搜第一名关键词所在标签的CSS Selector为:
#pl_top_realtimehot > table > tbody > tr:nth-child(2) > td.td-02 > a
其中#pl_top_realtimehot 代表ID为pl_top_realtimehot 的标签,即下图中第一行的div 标签;> table 表示当前标签的下一层 table label,也就是下图中第二行的 table label; tr:nth-child(2 ) 表示当前标签label下的第二个 tr ,即下图中选中的 tr label。
通过观察网络结构,我们可以发现,每一个热搜都是tbody标签下一个独立的tr标签;因此,同时获取不同热搜的关键词,我们只需要不再限制指定的即可 只需使用tr标签即可,即删除tr中的:nth-child(2) :nth-child(2) 在 CSS 选择器路径中。
#pl_top_realtimehot > table > tbody > tr > td.td-02 > a
在浏览器控制台的Elements选项卡中,使用快捷键Ctrl+F打开搜索框,在搜索框中搜索修改后的CSS Selector路径,可以得到51条结果,说明修改后的CSS Selector可以匹配所有同时热点话题。搜索 关键词。
接下来我们使用Python的第三方模块——BeautifulSoup模块(pip安装命令:pip install BeautifulSoup4)来实现解析。收录
请求的代码如下:
import requests<br />from bs4 import BeautifulSoup<br /><br />if __name__ == "__main__":<br /> response = requests.get("https://s.weibo.com/top/summary")<br /> bs = BeautifulSoup(response.content.decode(), 'lxml')<br /> for keyword_label in bs.select("#pl_top_realtimehot > table > tbody > tr > td.td-02 > a"):<br /> print(keyword_label.text)
运行结果已经可以将所有热搜打印到控制台,满足当前需求。
10个关键词把握2020中国经济走势<br />北宋古墓发现过仙桥<br />香港各界发起联署支持国家安全立法<br />马路惊现非洲雄狮<br />澳门所有大中小学升国旗唱国歌全覆盖<br />......
本系列案例采集
的所有数据只能用于学习和研究目的!
案例需求说明:因此微博热搜榜是实时更新的,所以一个比较完整的采集需求如下:每3分钟采集一次微博热搜榜前49条热搜(忽略文中广告3信息),并将结果存入数据库,数据库中至少要收录
采集时间、排名(rank)、关键词(关键词)、流行度(hot)、类型(type)等字段。完整的案例将在后面的内容中进行讲解。
案例讲解说明:本文作为第一个案例,通过图文详细讲解每个步骤,后续案例将以讲解思路为主。
汇总:头条搜索流量统计分析
0x01:事件原因
切记头条搜索统计达不到流量分析,请无视...
最近手机收到阿里云服务器磁盘使用率过高的警告信息。我数了一下,也不是很好。不能生成临时文件,肯定是服务器上的网站不正常,不能写入数据库……如果满了,会导致灾难性的故障),思考0.1秒后,取出手机ssh服务器,而且操作猛如虎,不出所料,总磁盘40G,视频占用30G,近6000个*敏*感*词*姐视频,请无视我吞吞吐吐的动作...,为了不影响网站,包,下载,删除服务器上的文件,停止采集
脚本。
在一月...
在某家肯德基吃炸鸡,看美剧,享受午后暖暖的阳光,手机响起一条短信,电脑同时收到一封邮件,他的眉头紧锁,不对,服务器宕机了,他感觉心里乱糟糟的。短信又提示磁盘快满了,记得关掉爬虫脚本,别问明明是谁,我要安静!放下手中的炸鸡,暂停播放,双手油腻地使用df du命令。我发现几个网站每天的web日志都是几百M,一个月总日志文件28G。
0x02: 日志分析,流量异常
第一直觉是网站被攻击了,IP被过滤了,不过没什么大问题
继续分析,发现很多页面只有html的访问记录,没有CSS、Js、Css等记录。我的直觉再次告诉我,有人在爬取网站数据,但是爬虫一般是根据url上的ID增减。这些请求是不规则的,先保持当前的想法。
找到SEO运营部需要到百度统计账号。对了,逗逗*敏*感*词*姐,嘎嘎……打开统计工具,看看流量有没有异常。哎,这个月流量明显增加了。对比56%,主要是百度,不禁感慨公司离不开百度,但和上月相比,流量持平,略有下降,其余主要来源为直达,占比30%从事互联网行业多年的我一下子就知道这里的招数很猫腻。直接访问的比例过高。必须是SEO部门才能完成性能补给。呵呵呵呵~,感觉一下子抓住了其他部门的尾巴,而结局往往就是真相。不过很闹腾,请大家看看……
0x03:并排,进入内部
虽然认识的小九九是其他部门的,但俗话说“井水不犯河水”、“人不犯我不犯人”,作为一个希望世界和平的Libra运维工程师,他不能做“损人利己”的事,默默删除系统日志,只保留最近5天,换取磁盘容量,别问我为什么不扩容,公司有不允许,宝宝觉得苦。别问我为什么不写个自动删除脚本,懒懒懒懒。。。
过了几天,为了讨*敏*感*词*的欢心,我提出了这个问题。目的是让她告诉她的上级,假的金额应该更真实一些。我这才知道,公司减少了百度SEM的投入,增加了今日头条的搜索业务。毁了一个世界名牌,我喜欢看*敏*感*词*姐的视频,当然知道头条搜索,某个声音下的公司的产品,但最后分析没有头条搜索的流量,我是不是妄想. 因为我很忙,这件事没法做...
0x04:红色紧急,委以重任
大概意思就是公司月底汇总,运营部统计投入产出比,公司花钱看不到效果,运营部汇总头条流量也统计不了,于是我被委以重任(你说为什么不找程序员,我也想知道,可能公司看我比较空闲吧!),开始分析头条搜索。
0x05:步入正题,一波三折
工欲善其事,必先利其器!为了抓*敏*感*词*姐的视频,我安装了抓包。
第一步:打开提琴手
Setp2:打开“今日头条”应用程序并搜索关键词
" />
Step3:分析数据包数据
今日头条搜索结果页面
忽略我先搜的词,一不小心把押金泄露了。上图是搜索到“二手车2万左右”出现的列表页。它只是触发了搜索,并没有点击具体结果的 URL。我们没有访问访问的信息,如下图:
一开始我以为是今日头条偷偷把流量给了一些白名单网站,但是不管网站大小都是这样。
没有点击搜索结果,仍然请求网站
点击一个有百度网址统计的网站
收录
百度统计的页面
点击后可以看到百度和谷歌统计提交的信息:如下图
百度统计提交表单
谷歌统计提交表格
从统计工具中点击Post表单信息和Referer信息,这两个工具都不能统计流量来源,只能在“直达”中看到。后来用自己的博客测试了国内的小众(qq、cnzz、51la)统计工具,发现统计的流量没有一个来自头条,心里一万只草泥马擦肩而过,这不是陷阱吗?
0x06:求根
为了解决这个问题,我翻遍了各大论坛,走访了各大社区,但答案遥遥无期,在官网上找到了解释。让我想起了网友找*敏*感*词*姐的评论。一起去海钓吧
门户网站:
" />
官方话:
预加载技术 为了给用户提供更好的体验,今日头条采用预加载技术,大大提高了用户打开文章的速度,让用户在进入文章时几乎不需要等待,实现了“二次打开”的体验。所谓预加载就是在用户打开页面之前预加载文章的html、css、javascript部分。一些浏览器制造商也使用这种技术来提高网页访问速度。比如:号称“智能预取,速度革命”的搜狗高速浏览器,就是如此。预加载技术特点: 1. 预加载只加载文本代码(html、css、javascript),不预加载图片。2.预加载不执行代码(javascript),并且不影响下游网站的流量统计。3. 广告未预加载。
所谓预加载就是将搜索结果页面(标识为全网站点)的第三方站点的Html源代码提前缓存到手机本地。视频提前缓存到本地,实现访问无延迟。
一切都有两个方面,预加载缺陷:
1、因为没有Referer参数,我们看不清流量来源,这也是公司无法区分统计流量的原因。
2、即使客户没有点击搜索结果页的网站,只是搜索关键词,网站服务器也会产生网站日志,导致流量不畅的迹象。
分析这几天的日志文件,果然今日头条去掉了各大搜索引擎的源,css、js、图片,其余的都被头条直接访问搜索了。与统计工具相比,PV 多出 10%。排除少量爬虫,乱七八糟,意味着剩下的8%可能是头条搜索页面没有点击产生的流量!
在给操作*敏*感*词*姐解释以上内容的时候,*敏*感*词*姐愣住了,一脸的佩服(不可理解),我简单总结一下:
服务器网络日志和统计工具数据不对称。每当关键词从头条搜索引擎搜索一个网站时,即使您没有点击网页日志,也会被记录下来。Web日志量大于统计工具运营部门。真实流量,0x07:今日头条搜索流量统计汇总
在观察了流量的增长趋势后,我认为公司做头条搜索是一个明智的决定。虽然感觉还不完美,但考虑到头条在一两年内发展到这样的程度,我还是觉得这家公司的未来是有希望的。,希望今日头条团队拿出类似百度站长的工具,完善自己的系统,向百度看齐。
Q:今日头条可以统计流量吗?
答:可以算的。百度、友盟(CNZZ)等统计工具体现的来源是“直达”。
Q:是否可以统计具体关键词带来的流量
A:头条暂时无法统计关键词带来的具体金额,头条也在改进中
Q:为什么我无法区分今日头条的流量?
A:因为今日头条APP采用预加载技术实现“秒开”体验,预加载不执行代码(javascript),所以第一次请求不执行js,没有referer字段,导致记录失败资源
官方预加载技术说明:
佛说:“无有,无有。” 工作了半天,还是没有解决我们公司运营部的问题。没法面对*敏*感*词*姐们。欢迎留言~