Python3爬虫百度一下,坑死你?

一、写在前面

这个标题是借用的路人甲大佬的一篇文章的标题(百度一下,坑死你),而且这次的爬虫也是看了这篇文章后才写出来的,感兴趣的可以先看下这篇文章。

前段时间有篇文章《搜索引擎百度已死》引起了很多讨论,而百度对此的回复是:百家号的内容在百度搜索结果中不超过10%。但是这个10%是第一页的10%还是所有数据的10%,我们不得而知,但是由于很多人都只会看第一页的内容,而如果这第一页里有十分之一的内容都来自于百家号,那搜索体验恐怕不怎么好吧?然后我这次写的爬虫就是把百度上面的热搜事件都搜索一下,然后把搜索结果的第一页上的标题链接提取出来,最后对这些链接进行一些简单的分析,看看百家号的内容占比能有多少。

二、具体步骤

1.页面分析

首先打开网页查看百度的热点事件,页面如下:

这次我主要对今日热点、娱乐热点、体育热点进行了爬取,每个热点下面有50条热点事件,然后对每个事件进行搜索,比如第一条--马云的福字:

可以看到搜索结果的第一页上有很多标题,然后对这些标题的链接进行爬取,再保存到一个txt文件里,最后对这些数据进行分析。

2.主要代码

(1)获取真实链接

这些搜索结果页面上的链接都是经过加密的,如下图:

所以我们爬取得到的链接都是http://www.baidu.com/link?url=VfA2jxmqJdYt1U-G0wHjWIXglVEi-WCxpa8aaMCeOzkqK-c5CgYngPiJT6_-kmWE3ePTHCpgYlX5oq9SQDJgEukKCY19o26JlS1pEIgnlupbw0Ss9Ro3gQjYVuJljdxyBPfiDUJhM9ODV_0mKnrUhESJ95Az1OnB6mMScmCXiUi这种,但是我们点进去之后就能得到真实的链接https://www.baidu.com/s?tn=news&rtt=1&bsst=1&wd=%E9%A9%AC%E4%BA%91%E7%9A%84%E7%A6%8F%E5%AD%97&cl=2&origin=ps,那我们要怎么得到真实的链接呢?相关代码如下:def get_real_url(self, fake_url):

# 获取真实的链接

try:

res = requests.get(fake_url, headers=self.headers)

real_url = res.url

except Exception as e:

print(e)

(2)数据处理

这里我总共爬取了1051条链接,如下图:

但是这样的数据是明显没有办法进行分析的,所以需要进行一下处理,比如将https://baijiahao.baidu.com/s?id=1624053575252859170&wfr=spider&for=pc变成baijiahao.baidu,相关代码如下:href = "https://baijiahao.baidu.com/s?id=1624053575252859170&wfr=spider&for=pc"

match = re.match("(http[s]?://.+?[com,cn,net]/)", href)

href = match.group()

href = href.replace('cn', 'com').replace('net', 'com')

href = href[href.index(':') + 3:].rstrip('.com/')

print(href)

# baijiahao.baidu

(3)数据分析

这里主要使用了matplotlib绘图帮助我们分析数据。首先需要统计出各个网站出现的次数,然后进行一个排序,得到排名前十的网站,结果如下(前面是网站,后面是出现次数):https://baijiahao.baidu.com/  188

https://www.baidu.com/  114

http://www.sohu.com/  60

https://news.china.com/  29

http://www.guangyuanol.cn/  27

http://image.baidu.com/ 24

http://3g.163.com/  20

https://sports.qq.com/  19

https://www.iqiyi.com/ 17

https://baike.baidu.com/  17

可以看到百家号出现的次数是最多的。然后进行绘图分析,这里主要是绘图的代码,因为使用的是百分数,所以在绘图的时候会稍微麻烦一点:def plot(self, index_list, value_list):

b = self.ax.barh(range(len(index_list)), value_list, color='blue', height=0.8)

# 添加数据标签

for rect in b:

w = rect.get_width()

self.ax.text(w, rect.get_y() + rect.get_height() / 2, '{}%'.format(w),

ha='left', va='center')

# 设置Y轴刻度线标签

self.ax.set_yticks(range(len(index_list)))

self.ax.set_yticklabels(index_list)

# 设置X轴刻度线

lst = ["{}%".format(i) for i in range(0, 20, 2)]

self.ax.set_xticklabels(lst)

plt.subplots_adjust(left=0.25)

plt.xlabel("占比")

plt.ylabel("网站")

plt.rcParams['font.sans-serif'] = ['SimHei']

plt.savefig("bjh.jpg")

print("已保存为bjh.jpg!")

三、运行结果

由于每个事件的搜索结果都是不同的,所以在解析网页的时候可能会出错,然后就是请求频率太高了会被ban掉,而且有时候UA会被识别出来然后就被ban掉了,运行情况如下图:

最后看一下绘制出来的图片:

可以看到百家号的内容占比达到了17%,而排在第二的也是百度自家的产品,内容占比也达到了10%。当然了,由于搜索的都是百度上的热搜事件,所以得到的结果百度自家的内容会多一点,但是光百家号的内容就占了17%,是不是也太多了点呢?

为什么要用python不用origin_Python告诉你为什么百度已死相关推荐

  1. python用设计模式吗_为什么Python不用设计模式?

    原标题:为什么Python不用设计模式? 来自:码农翻身(微信号:coderising) 在遥远的Python王国,有一位少年,非常热爱编程,他的父母想给他报一个班,问了万能的朋友圈以后,发现大家都推 ...

  2. Python大神告诉你,学习Python应该读哪些书!

    关注头条号,私信回复资料会有意外惊喜呦------最后一张照片有资料呦. 在传统的Web开发之外的领域,Python开发人员的就业机会越来越多,无论你是初学者还是大神,现在正是投入到Python学习的 ...

  3. Python数据采集分析告诉你为何上海二手房你都买不起

    感谢关注Python爱好者社区公众号,在这里,我们会每天向您推送Python相关的文章实战干货. 来吧,一起Python. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的 ...

  4. 为什么闲鱼不能搜索python_闲鱼上哪些商品抢手?Python 分析后告诉你

    原标题:闲鱼上哪些商品抢手?Python 分析后告诉你 阅读文本大概需要 10 分钟. 1 目 标 场 景 经常看到有朋友在闲鱼卖些小东西又或是自己擅长的一些技能,都能为他们带来不错的睡后收入. 闲鱼 ...

  5. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  6. Python学习笔记—低阶入门(已完结)

    目录 前言 注意 该不该学习Python(个人感受,纯属胡言论语) 基础知识:Python 的数据存储机制 第一章 Python基本语法 1.1 Python 数据类型 1.1.1 数值类型 1.1. ...

  7. python程序如何执行死刑图片_如何判断对象已死

    已死的对象就是不可能被任何途径使用的对象,有以下几种方法判断一个对象是否已经死了: 引用计数 给对象添加一个引用计数器,每当有一个地方引用他,计算器就加 1:当引用失效时,计数器减 1:任何时刻计数器 ...

  8. Python 可视化近 90 天的百度搜索指数 + 词云图

    作者 | 叶庭云 来源 | AI庭云君 一.简介 在实际业务中我们可能会使用爬虫根据关键词获取百度搜索指数历史数据,然后进行对应的数据分析. 百度指数,体验大数据之美.但要获取百度指数相关的数据,困难 ...

  9. python从入门到精通视频教程百度云-python从入门到精通视频教程百度云资源

    python从入门到精通视频教程百度云资源来源 : 华清远见 2019-05-24 随着新技术的不断推进,在未来无论我们是要进入网页开发.数据分析.机器学习.人工智能还是无人车云计算等领域,Pytho ...

最新文章

  1. YARN-2.7.3-源码分析系列2:启动脚本原理的分析
  2. L2-009. 抢红包 结构体排序
  3. php中转,使用 PHP Curl 做数据中转
  4. 假期ACM训练计划表
  5. 解决HttpServletResponse输出中文乱码问题
  6. 分析开源项目源码,我们该如何入手分析?(授人以渔)
  7. c# 怎样从bitmap初始化image类_C#二维数组初始化概括(新手篇)
  8. jsp医院管理系统_Thymeleaf+SpringBoot+SpringDataJPA实现的中小医院信息管理系统
  9. 史上最全MySQL 大表优化方案(长文)
  10. 在Java SE中使用Hibernate Bean Validator
  11. CSS3最颠覆性的动画效果,基本属性[3D]
  12. Semaphore及其用法
  13. linux 可执行文件去除绝对路径
  14. RedHat系列软件管理(第二版) --脚本安装
  15. react-native无法在react-native-gesture-handler中解析符号android.support.v4.util.Pools解决方案...
  16. [android] AndroidManifest.xml 详解
  17. 猴子排序的期望复杂度推导(雾)
  18. jQury+Ajax与C#后台交换数据
  19. PMP第五章:项目范围管理
  20. java 火星坐标转换,java实现百度坐标的摩卡托坐标与火星坐标转换的示例

热门文章

  1. JAVA 数组元素的反转
  2. [LeetCode] 35. Search Insert Position
  3. LoadRunner常用术语
  4. 用webstorm自动编译less产出css和sourcemap
  5. 分布式版本控制系统入门
  6. [Hadoop]MapReduce多路径输入与多个输入
  7. C++走向远洋——63(项目二2、两个成员的类模板)
  8. 关于JS获取select值的两种实现方法
  9. 大话Fragment管理
  10. Linux—程序包安装与管理