今天我们对虎牙平台的lol板块的主播信息进行爬取,主要爬取主播名称,以及观看人数。
下面我们先来分析一下网页源吧:
这张图片下面的翻页列表是动态的,随着上线的主播越来越多,翻页的列表也会越来越大。

通过XpathHelper工具我们可以找到主播网名对应的xpath路径,同理我们可以找到对应观看人数的xpath

下面我们开始编写代码吧。
本次爬虫练习,我们使用selenium模块进行爬取,使用selenium不用关注网页是静态的,还是动态的,直接进行加载就可以了

# 使用selenium不用关注网页是静态的,还是动态的,直接进行加载就可以了
from selenium import webdriver# 通过webdriver创建一个浏览器
driver = webdriver.Chrome()
url = "https://www.huya.com/g/lol"
# 通过创建的浏览器发送请求
driver.get(url)
# 获取网页源代码
html = driver.page_source# 进行网页解析
# 使用find_elements_by容易报错,最好还是用我们以前的xpath技术
names = driver.find_elements_by_xpath("//i[@class='nick']")
counts = driver.find_elements_by_xpath("//span[@class='num']")
for name, count in zip(names, counts):print(name.text, ":", count.text)

这样我们的爬虫代码1.0就写好了,不过缺陷是只能爬取一页内容。
下面我们来讲解如何在原有代码基础上爬取更多的页面。
我们先通过源码查看一下如何控制翻页的。
从图中可以看出翻页控制使用了

下面我们使用if判断条件进行翻页操作,当然这个操作要写在while循环中。

# 使用selenium不用关注网页是静态的,还是动态的,直接进行加载就可以了
from selenium import webdriver# 通过webdriver创建一个浏览器
driver = webdriver.Chrome()
url = "https://www.huya.com/g/lol"
# 通过创建的浏览器发送请求
driver.get(url)
while True:
# 获取网页源代码html = driver.page_source# 进行网页解析# 使用find_elements_by容易报错,最好还是用我们以前的xpath技术names = driver.find_elements_by_xpath("//i[@class='nick']")counts = driver.find_elements_by_xpath("//span[@class='num']")# 循环打印网名与人数for name, count in zip(names, counts):print(name.text, ":", count.text)# -1表示,找不到laypage_next元素字样if driver.page_source.find("laypage_next") != -1:# 针对“下一页”进行解析,这到这个元素进行点击操作即可driver.find_element_by_xpath("//a[@class='laypage_next']").click()else:break

写好代码后,运行发现出错了。
报错代码如下:

 raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document(Session info: chrome=88.0.4324.104)


造成这种错误的原因是我们的网速太慢,导致网页加载速度跟不上网页解析速度,致使出现错误,我们只需在网页加载前面使用sleep(5)让其休眠等待即可。
最终修改的代码为:

# 使用selenium不用关注网页是静态的,还是动态的,直接进行加载就可以了
from selenium import webdriver
from time import sleep# 通过webdriver创建一个浏览器
driver = webdriver.Chrome()
url = "https://www.huya.com/g/lol"
# 通过创建的浏览器发送请求
driver.get(url)
num = 1
while True:print("第" + str(num) + "页-------------------------------------")num += 1
# 获取网页源代码sleep(5)html = driver.page_source# 进行网页解析# 使用find_elements_by容易报错,最好还是用我们以前的xpath技术names = driver.find_elements_by_xpath("//i[@class='nick']")counts = driver.find_elements_by_xpath("//span[@class='num']")for name, count in zip(names, counts):print(name.text, ":", count.text)# -1表示,找不到laypage_next元素字样if driver.page_source.find("laypage_next") != -1:# 针对“下一页”进行解析,这到这个元素进行点击操作即可driver.find_element_by_xpath("//a[@class='laypage_next']").click()else:break

终于一波三折编写好了这段代码。
下面看一下运行过程吧:

python爬虫--使用selenium--实战爬取虎牙直播平台相关推荐

  1. 使用selenium自动爬取斗鱼直播平台的所有房间信息

    使用selenium自动爬取斗鱼直播平台的所有房间信息 文章目录 使用selenium自动爬取斗鱼直播平台的所有房间信息 使用selenium实现动态页面模拟点击 什么是selenium? selen ...

  2. Python Selenium简单爬取虎牙直播弹幕(仅学习)

    目录 前言 一.爬虫思路 二.使用步骤 1.引入库 2.通过selenium进入直播间 3.分析HTML 4.实现伪监听 总结 前言 学习python的第二周,在此记录学习进程: 这次有了需求,由于要 ...

  3. Python爬虫:Selenium+ BeautifulSoup 爬取JS渲染的动态内容(雪球网新闻)

    最近要有一个任务,要爬取https://xueqiu.com/#/cn 网页上的文章,作为后续自然语言处理的源数据. 爬取目标:下图中红色方框部分的文章内容.(需要点击每篇文章的链接才能获得文章内容) ...

  4. python从网址爬图片协程_Python爬虫多任务协程爬取虎牙MM图片

    查看: 4420|回复: 241 [作品展示] Python爬虫多任务协程爬取虎牙MM图片 电梯直达 发表于 2019-4-17 21:35:47 | 只看该作者 |倒序浏览 |阅读模式 马上注册,结 ...

  5. python爬取虎扑评论_python爬虫系列Selenium定向爬取虎扑篮球图片详解

    前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...

  6. 【爬虫实战】python爬取虎牙直播间封面美女图片

    Python爬虫爬取虎牙直播间封面美女图片 本文目录 Python爬虫爬取虎牙直播间封面美女图片 写作缘起 上代码 效果展示 思路分析 写作缘起 这篇文章主要是介绍如何使用python爬虫来爬取虎牙直 ...

  7. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  8. Python爬虫【四】爬取PC网页版“微博辟谣”账号内容(selenium多线程异步处理多页面)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  9. Python爬虫【三】爬取PC网页版“微博辟谣”账号内容(selenium单页面内多线程爬取内容)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

最新文章

  1. 互联网协议 — DNS 缓存机制
  2. c语言 宏 变长参数,科学网—C/C++中处理变长参数函数(Variadic Function)的几个宏 - 彭彬的博文...
  3. 微抖动,繁忙的等待和绑定CPU
  4. 码农和程序员的几个重要区别!
  5. 如何修改wince的网络配置
  6. java 并发组件_Java 并发计数组件Striped64详解
  7. hdu 1760 DFS+博弈
  8. maven常见问题处理(3-3)Gradle编译时下载依赖失败解决方法
  9. 千寻位置 开发demo_CICV2019:博世相对高精度定位与千寻绝对高精度定位
  10. 一些用xib加载主界面的过程
  11. 那些不需要你知道的Chrome DevTool - 使用技巧篇
  12. 利用BP神经网络求解非线性方程组
  13. matlab实现大律法,Otsu算法(大律法或最大类间方差法)
  14. 一堆比B站还刺激的公众号!
  15. dellr710服务器添加硬盘步骤,DELL R710服务器在线扩硬盘
  16. 知识产权保护的内容有哪些?
  17. 弘辽科技:拼多多批发单算销量吗?拼多多刚开店怎么有销量
  18. CAN-TP(15765-2协议)网络层协议解析
  19. 一个人生活,如何摆脱孤独提升幸福感?
  20. 欢迎到我们的学海灯塔给我们留言

热门文章

  1. Ubuntu22.04连接蓝牙适配器
  2. matlab编程是用c语言吗,matlab调用c语言编程.doc
  3. 关于dorisdb 本地搭建virtual_box虚拟机设置CPU支持AVX2指令集
  4. [Java]Leetcode69 Sqrt(x)
  5. 道教对中国文化的深远影响
  6. Python 诗意回文
  7. Win7 3264位纯净版下载地址
  8. 华为正式发布鸿蒙新浪微博,华为正式发布鸿蒙,你需要了解的全在这里!为何能领先安卓系统?...
  9. 最新系统漏洞--D-Link DAP-1330堆栈缓冲区溢出漏洞
  10. 海子Java并发编程学习总结