汇总: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 标签;&gt; 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字段,导致记录失败资源

  官方预加载技术说明:

  佛说:“无有,无有。” 工作了半天,还是没有解决我们公司运营部的问题。没法面对*敏*感*词*姐们。欢迎留言~

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线