34行代码爬取微博实时热搜榜单

微博大家都用着,相信大家也都关注了不少的明星,作为一枚合格的粉丝会经常关注明星的八卦动态。

如何判断一个明星红不红,看她/他上热搜的次数有多少!!!当然了现在微博的热搜也变味了,不仅仅靠数据统计汇总,大明星随随便便花点儿钱就能买个热搜霸榜几个小时,反而是一些真实需要关注的事儿却上不了热搜,比如前段时间发生的3种颜色上不了热搜。

咳咳!!!扯得有点儿远了。

记住!这是个技术贴!言归正传~

今天给大家展示一下,本人是如何通过34行代码爬取微博热搜榜的,代码有点儿龊,各位见谅!先上一张目前微博实时热搜榜的图,我只截了一半的图,实际榜单有50条。


页面链接我就不贴了,如果说您老连微博热搜榜的页面在哪里,都找不到,请出门左转不送!!!

好,我们的目标是通过代码把实时热搜榜的榜单爬下来,包括排名、关键词、链接、搜索指数。

第一步:准备开发环境

开发语言: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 venvNew python executable in venv/bin/pythonInstalling distribute............done.

现在,无论何时你想在某个项目上工作,只需要激活相应的环境。

在 OS X 和 Linux 上,执行如下操作:

$ . venv/bin/activate

下面的操作适用 Windows:

$ venv\scripts\activate

无论通过哪种方式,你现在应该已经激活了 virtualenv(注意你的 shell 提示符显示的是当前活动的环境)。


项目结构如下:

weibo----父目录

        venv----子目录

第二步:安装 Scrapy 和 BeautifulSoup

使用pip安装Scrapy,安装教程

pip install Scrapy

使用pip安装BeautifulSoup,安装教程

pip install beautifulsoup4

在开始爬取之前,您必须创建一个新的Scrapy项目,进入weibo的文件夹中,执行如下命令:

scrapy startproject wb

此时的文件夹结构如下图:


在spiders中新建wb_spider.py的python文件,我们的34行核心代码都写在这个里面。好,准备工作都已经就绪,剩下的工作就是分析页面结构。

第三步:分析微博实时热搜榜页面结构

在谷歌浏览器中打开微博热搜榜页面,F12打开开发者工具,通过鼠标选择如下:


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


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


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


好了,到此为止,整个分析过程结束,开始进入编码阶段。

第四步: 编写解析代码

先上代码截图:


代码解释:

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为realtimehot的Table的脚本信息,为什么是8呢?我在页面数的。

start = htm.find("(") substr = htm[start+1:-1]:截取脚本里面的json串信息。

self.getData(text["html"]):此时就获取到了我们需要的Table的html标签结构了。

def getData(self,text)::此方法主要就是解析Table标签,获取目标信息,此处主要使用的是BeautifulSoup进行解析的。

整个代码解析完成,上最终效果图:


本文为码农之家 原创,获取授权转载。
  • 3
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值