Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据
程序说明:抓取斗鱼直播平台的直播房间号及其观众人数,最后统计出某一时刻的总直播人数和总观众人数。
过程分析:
一、进入斗鱼首页http://www.douyu.com/directory/all
进入平台首页,来到页面底部点击下一页,发现url地址没有发生变化,这样的话再使用urllib2发送请求将获取不到完整数据,这时我们可以使用selenium和PhantomJS来模拟浏览器点击下一页,这样就可以获取完整响应数据了。
首先检查下一页元素,如下:
<a href="#" class="shark-pager-next">下一页</a>
使用selenium和PhantomJS模拟点击,代码如下:
from selenium import webdriver
# 使用PhantomJS浏览器创建浏览器对象
driver = webdriver.PhantomJS()
# 使用get方法加载页面
driver.get("https://www.douyu.com/directory/all")
# class="shark-pager-next"是下一页按钮,click() 是模拟点击
driver.find_element_by_class_name("shark-pager-next").click()
# 打印页面页面查看
print driver.page_source
这样就可以通过设置一个循环条件,一直点击下去,直到页面加载完。循环终止的条件为最后一页,进入最后一页,检查下一页元素:
<a href="#" class="shark-pager-next shark-pager-disable shark-pager-disable-next">下一页</a>
对比发现:当出现"shark-pager-disable-next",下一页无法点击,这就是循环停止的条件。
# 如果在页面源码里没有找到"shark-pager-disable-next",其返回值为-1,可依次作为判断条件
driver.page_source.find("shark-pager-disable-next")
二,对要提取的内容进行分析
查看直播房间名称的元素,得到如下结果:
<span class="dy-name ellipsis fl">AI冬Ming</span>
使用BeatuifulSoup获取元素,代码如下:
# 房间名
names = soup.find_all("span", {"class" : "dy-name ellipsis fl"})
查看观看人数的元素,得到如下结果:
<span class="dy-num fr">75.6万</span>
使用BeatuifulSoup获取元素,代码如下:
# 观众人数
numbers = soup.find_all("span", {"class" :"dy-num fr"})
具体过程大概如此,下面是完整代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*- from selenium import webdriver
from bs4 import BeautifulSoup as bs
import sys
reload(sys)
sys.setdefaultencoding("utf-8") class Douyu(): def __init__(self):
self.driver = webdriver.PhantomJS()
self.num = 0
self.count = 0 def douyuSpider(self):
self.driver.get("https://www.douyu.com/directory/all")
while True:
soup = bs(self.driver.page_source, "lxml")
# 房间名, 返回列表
names = soup.find_all("span", {"class" : "dy-name ellipsis fl"})
# 观众人数, 返回列表
numbers = soup.find_all("span", {"class" :"dy-num fr"}) for name, number in zip(names, numbers):
print u"观众人数: -" + number.get_text().strip() + u"-\t房间名: " + name.get_text().strip()
self.num += 1
count = number.get_text().strip()
if count[-1]=="万":
countNum = float(count[:-1])*10000
else:
countNum = float(count)
self.count += countNum # 一直点击下一页
self.driver.find_element_by_class_name("shark-pager-next").click()
# 如果在页面源码里找到"下一页"为隐藏的标签,就退出循环
if self.driver.page_source.find("shark-pager-disable-next") != -1:
break print "当前网站直播人数:%s" % self.num
print "当前网站观众人数:%s" % self.count if __name__ == "__main__":
d = Douyu()
d.douyuSpider()
运行结果(部分展示):
Python爬虫实例(二)使用selenium抓取斗鱼直播平台数据的更多相关文章
- Python爬虫实战:使用Selenium抓取QQ空间好友说说
前面我们接触到的,都是使用requests+BeautifulSoup组合对静态网页进行请求和数据解析,若是JS生成的内容,也介绍了通过寻找API借口来获取数据. 但是有的时候,网页数据由JS生成,A ...
- python爬虫之分析Ajax请求抓取抓取今日头条街拍美图(七)
python爬虫之分析Ajax请求抓取抓取今日头条街拍美图 一.分析网站 1.进入浏览器,搜索今日头条,在搜索栏搜索街拍,然后选择图集这一栏. 2.按F12打开开发者工具,刷新网页,这时网页回弹到综合 ...
- python爬虫构建代理ip池抓取数据库的示例代码
爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...
- Python爬虫入门教程 46-100 Charles抓取手机收音机-手机APP爬虫部分
1. 手机收音机-爬前叨叨 今天选了一下,咱盘哪个APP呢,原计划是弄荔枝APP,结果发现竟然没有抓到数据,很遗憾,只能找个没那么圆润的了.搜了一下,找到一个手机收音机 下载量也是不错的. 2. 爬虫 ...
- Python爬虫入门教程 45-100 Charles抓取兔儿故事-下载小猪佩奇故事-手机APP爬虫部分
1. Charles抓取兔儿故事背景介绍 之前已经安装了Charles,接下来我将用两篇博客简单写一下关于Charles的使用,今天抓取一下兔儿故事里面关于小猪佩奇的故事. 爬虫编写起来核心的重点是分 ...
- Python 爬虫实例(8)—— 爬取 动态页面
今天使用python 和selenium爬取动态数据,主要是通过不停的更新页面,实现数据的爬取,要爬取的数据如下图 源代码: #-*-coding:utf-8-*- import time from ...
- PYTHON 爬虫笔记十:利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB(实战项目三)
利用selenium+PyQuery实现淘宝美食数据搜集并保存至MongeDB 目标站点分析 淘宝页面信息很复杂的,含有各种请求参数和加密参数,如果直接请求或者分析Ajax请求的话会很繁琐.所以我们可 ...
- 使用Selenium模拟浏览器抓取斗鱼直播间信息
获取斗鱼直播间每个房间的名称.观看人数.tag.主播名字 代码: import time from multiprocessing import Pool from selenium import w ...
- Python 爬虫实例(15) 爬取 汽车之家(汽车授权经销商)
有人给我吹牛逼,说汽车之家反爬很厉害,我不服气,所以就爬取了一下这个网址. 本片博客的目的是重点的分析定向爬虫的过程,希望读者能学会爬虫的分析流程. 一:爬虫的目标: 打开汽车之家的链接:https: ...
随机推荐
- django 运行不同的settings
python manage.py runserver --settings=EMCRP.settings_local
- logcat的调试 比较有用的几个命令
网上很多的logcat调试命令,但是太多的命令只会令人盐杂. (主要是adt工具带的调试功能容易死掉 每次都要重启太烦) 个人认为有一下几个常用命令: adb logcat -c 清除所有以前的日志 ...
- 网页尺寸scrollHeight
http://www.imooc.com/code/1703 网页尺寸scrollHeight scrollHeight和scrollWidth,获取网页内容高度和宽度. 一.针对IE.Opera: ...
- 教程-Delphi中的GExperts搜索代码快捷键
Shift+Ait+S 打开搜索 Ctrl+Ait+R 打开上次搜索结果
- matlab使用的心得
保存变量到一个文件,可以是部分变量或者全部变量save('back.mat','a'):%把a变量保存在文件中 加载文件中的变量可以是部分或者全部变量load('matlab.mat','a') 向字 ...
- 转:Linux下which、whereis、locate、find 命令的区别
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索.这些是从网上找到的资料,因为有时很长时间不会用到,当要用的时候经常弄混了,所以放到这里方便使用. which ...
- C语言 · 冒泡法排序
算法提高 冒泡法排序 时间限制:1.0s 内存限制:512.0MB 输入10个数,用“冒泡法”对10个数排序(由小到大)这10个数字在100以内. 样例输入 1 3 6 8 2 7 ...
- 因客户机IP与服务器IP不在同一网段导致无盘客户机开机卡tftp,提示:PXE-E11: ARP timeout
61的地址需要在上面的地址范围段之内 问题现象] 无盘客户机启动获取DHCP后卡在tftp界面提示:PXE-E11: ARP timeout,如下图: [原因说明] 客户机的IP地址与服务器IP地址不 ...
- thinkphp 集成 twig模版引擎
下载地址:https://github.com/fucongcong/ThinkPHPLevel/archive/master.zip 控制器格式为: <?php namespace Home\ ...
- Android实现时间轴
昨天群里有讨论时间轴的项目,没有接触过,以为非常吊,研究之后才知道表面都是忽悠人的,使用listview就能实现了,也没有什么新奇的东西 废话少说,直接上图 图片和文字都能够私人订制 没什么好说的,直 ...