精华 34行代码爬取微博实时热搜榜单
发布于 1 年前 作者 JavaBird 1211 次浏览 来自 微博热搜

微博大家都用着,相信大家也都关注了不少的明星,作为一枚合格的粉丝会经常关注明星的八卦动态。 如何判断一个明星红不红,看她/他上热搜的次数有多少!!!当然了现在微博的热搜也变味了,不仅仅靠数据统计汇总,大明星随随便便花点儿钱就能买个热搜霸榜几个小时,反而是一些真实需要关注的事儿却上不了热搜,比如前段时间发生的3种颜色上不了热搜。咳咳!!!扯得有点儿远了。 记住!这是个技术贴!言归正传~ 今天给大家展示一下,本人是如何通过34行代码爬取微博热搜榜的,代码有点儿龊,各位见谅! 先上一张目前微博实时热搜榜的图,我只截了一半的图,实际榜单有50条。

QQ20171226-225401.png

页面链接我就不贴了,如果说您老连微博热搜榜的页面在哪里,都找不到,请出门左转不送!!! 好,我们的目标是通过代码把实时热搜榜的榜单爬下来,包括排名、关键词、链接、搜索指数。 第一步:准备开发环境 开发语言:python2.7 框架或lib: Scrapy 和 BeautifulSoup (其实BeautifulSoup就可以直接处理,Scrapy有点儿大材小用了) 开发工具:Visual Studio Code 或者 PyCharm 两者都可以 我们通过Virtualenv来构造python的运行环境。 virtualenv 为每个不同项目提供一份 Python 安装。它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立。 如果你在 Mac OS X 或 Linux 下,下面两条命令可能会适用: $ sudo easy_install virtualenv 或更好的: $ sudo pip install virtualenv 上述的命令会在你的系统中安装 virtualenv。它甚至可能会存在于包管理器中, 如果你用的是 Ubuntu,可以尝试: $ sudo apt-get install python-virtualenv 如果你用的是 Windows ,而且没有 easy_install 命令,那么你必须先安装这个命令。查阅 Windows 下的 pip 和 distribute 如何安装。之后,运行上述的命令,但是要去掉 sudo 前缀。 virtualenv 安装完毕后,你可以立即打开 shell 然后创建你自己的环境。我通常创建一个项目文件夹,并在其下创建一个 venv 文件夹 $ mkdir weibo $ cd weibo $ virtualenv venv New python executable in venv/bin/python Installing distribute............done. 现在,无论何时你想在某个项目上工作,只需要激活相应的环境。在 OS X 和 Linux 上,执行如下操作: $ . venv/bin/activate 下面的操作适用 Windows: $ venv\scripts\activate 无论通过哪种方式,你现在应该已经激活了 virtualenv(注意你的 shell 提示符显示的是当前活动的环境)。

QQ20171226-232652.png

项目结构如下: weibo----父目录

  • venv----子目录

第二步:安装 Scrapy 和 BeautifulSoup 使用pip安装Scrapy,安装教程 pip install Scrapy 使用pip安装BeautifulSoup,安装教程 pip install beautifulsoup4 在开始爬取之前,您必须创建一个新的Scrapy项目,进入weibo的文件夹中,执行如下命令: scrapy startproject wb 此时的文件夹结构如下图: manzj.netspiders中新建wb_spider.py的python文件,我们的34行核心代码都写在这个里面。 好,准备工作都已经就绪,剩下的工作就是分析页面结构。 第三步:分析微博实时热搜榜页面结构 在谷歌浏览器中打开微博热搜榜页面,F12打开开发者工具,通过鼠标选择如下: 码农之家

可以看到整个热搜榜是包在一个ID为realtimehotTable标签里面,然后每一个tr标签里面包含一行榜单信息。

manzj.net

好了,我们的目标是从页面中找到整个个Table标签,并且通过代码把想要的数据解析出来,ok。 当我们在微博热搜榜的页面,右键->查看源代码 的时候发现,服务器返回的页面并不包含这个ID为realtimehotTable标签。 manzj.net

出现这种情况,一般肯定是通过Ajax加载或者动态操作Dom生成标签的,我们通过开发者工具查看网络并没有发现相关的数据请求,最后在网页 源代码底部发现几个脚本代码,在这些脚步代码中找到了ID为realtimehotTable标签,见下图:

manzj.net

好了,到此为止,整个分析过程结束,开始进入编码阶段。 第四步: 编写解析代码 先上代码截图: manzj.net 代码解释: class WbSpider(scrapy.spiders.Spider): 爬虫(Spider)类,不明白的童鞋,点这里 name = "weibo" :爬虫的名称,一个爬虫一个名称,唯一的。 start_urls=[ "http://s.weibo.com/top/summary?cate=realtimehot"] :包含了Spider在启动时进行爬取的url列表。 rhtml = response.xpath('//script/text()').extract():变量瞎定义的,大家将就着看,获取整个页面的script的字符串信息。 htm = rhtml[8]:获取目标ID为realtimehotTable的脚本信息,为什么是8呢?我在页面数的。😓 start = htm.find("(") substr = htm[start+1:-1] :截取脚本里面的json串信息。 self.getData(text["html"]) :此时就获取到了我们需要的Tablehtml标签结构了。 def getData(self,text)::此方法主要就是解析Table标签,获取目标信息,此处主要使用的是BeautifulSoup进行解析的。 整个代码解析完成,上最终效果图: QQ20171227-004200.png

本文为码农之家原创,如需要转载,请注明出处。

百度网盘链接: 传送门 关注微信公众号 派深工作室 ,回复文本 34行代码 获取资源密码

回到顶部