python爬取直播_python selenium爬取斗鱼所有直播房间信息过程详解
还是分析一下大体的流程:
发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作
分析斗鱼的翻页,有一个下一页按钮,是个li,class="dy-Pagination-item-custom" ,但是当烦到最后一页的时候,class="dy-Pagination-disabled dy-Pagination-next",所以我们要想利用selenium模拟点击这个按钮,我们应该利用
get_elements_by_xpath()这个函数,这样到最后一页就获取不到了,就可以终止程序了。而用elements的原因是当到最后一页的时候获取不到的话,element会报错
然后还是通用的套路:发送请求获取响应、提取数据和下一页的元素、保存数据、点击下一页的元素循环......
遇到的两个坑:
需要用time.sleep()函数强制等待页面加载完再获取元素,否则报错,睡几秒就看你的网速了
xpath定位的时候,网页上有的类如这样:class=" abc"或者class="abc " ,前面或后面有空格的,xpath处理的时候也必须有空格,否则获取不到
代码实现:
import time
from selenium import webdriver
class DouyuSpider(object):
def __init__(self):
self.start_rul = 'https://www.douyu.com/directory/all'
self.driver = webdriver.Chrome()
def get_content_list(self):
time.sleep(10) # 强制等待10秒,否则可能报错
li_list = self.driver.find_elements_by_xpath('//ul[@class="layout-Cover-list"]/li')
content_list = []
for li in li_list:
item = {}
item['room_img'] = li.find_element_by_xpath('.//img[@class="DyImg-content is-normal "]').get_attribute('src')
item['room_title'] = li.find_element_by_xpath('.//h3[@class="DyListCover-intro"]').text
item['root_category'] = li.find_element_by_xpath('.//span[@class="DyListCover-zone"]').text
item['author_name'] = li.find_element_by_class_name('DyListCover-user').text
item['watch_num'] = li.find_element_by_class_name('DyListCover-hot').text
content_list.append(item)
print(item) # 打印每次获取到的直播房间的信息
# 获取下一页的元素,为了防止没有报错,这里用elements,翻到最后一页一定就没有了,返回一个列表
next_url = self.driver.find_elements_by_xpath('//li[@class=" dy-Pagination-next"]')
next_url = next_url[0] if len(next_url) > 0 else None
return content_list, next_url
def save_content_list(self, content_list):
pass # 保存数据这里就不再做演示
def run(self): # 实现主要逻辑
# 1.start_url
# 2.发送请求,获取响应
self.driver.maximize_window()
self.driver.get(self.start_rul)
# 3.提取数据,提取下一页的元素
content_list, next_url = self.get_content_list()
# 4.保存数据
self.save_content_list(content_list)
# 4.点击下一页元素,循环
while next_url is not None:
next_url.click()
content_list, next_url = self.get_content_list()
self.save_content_list(content_list)
if __name__ == '__main__':
douban = DouyuSpider()
douban.run()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持谷谷点程序。
python爬取直播_python selenium爬取斗鱼所有直播房间信息过程详解相关推荐
- python定位相邻节点_Python selenium 父子、兄弟、相邻节点定位方式详解
今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...
- python爬斗鱼直播_python selenium爬取斗鱼所有直播房间信息过程详解
还是分析一下大体的流程: 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页 ...
- python爬取斗鱼_python selenium爬取斗鱼所有直播房间信息过程详解
还是分析一下大体的流程: 首先还是Chrome浏览器抓包分析元素,这是网址:https://www.douyu.com/directory/all 发现所有房间的信息都是保存在一个无序列表中的li中, ...
- python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解
今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...
- python中字符串切片取奇数_Python中的字符串切片(截取字符串)的详解
Python中的字符串切片(截取字符串)的详解 字符串索引示意图 字符串切片也就是截取字符串,取子串 Python中字符串切片方法 字符串[开始索引:结束索引:步长] 切取字符串为开始索引到结束索引- ...
- python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...
- python在线翻译代码_Python 20行简单实现有道在线翻译的详解
简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...
- python串口数据分包_python TCP Socket的粘包和分包的处理详解
概述 在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况.本文详细讲解解决该问题的步骤.使用的语言是Python.实际上解决该问题很简单,在应用层下,定义一个协议:消息头部+消息长度+ ...
- python音标1003python音标_python selenium 爬取百度翻译单词音标
python selenium 小爬虫 主要流程 读取excel文件中的单词--利用selenium 去百度翻译中获取单词对应的音标--写入cvs文件 selenium 安装 环境配置略过 谷歌浏览器 ...
最新文章
- java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程
- 二极管7种应用电路详解之五
- git tag 介绍
- php fopen 错误,php fopen函数失败怎么办
- 3.1.3 操作系统覆盖技术与交换技术的思想
- Queue(队列)-Swift实现与广度优先搜索应用
- oracle中 sql语句:start with .. connect by prior.. 用法
- 迁移 Docker 到其它磁盘目录
- 探究Redis两种持久化方式下的数据恢复
- Jsp页面的几种传参方式
- Mybatis源码阅读之一——工厂模式与SqlSessionFactory
- 图像处理技术上的空间域和空间频率域
- ios睡眠分析 卧床 睡眠_iPhone睡眠模式:教你设置追踪睡眠排程与提升睡眠品质...
- 算法学习-求平方根函数
- 计算机硬件及冯诺伊曼结构
- python pd Series 添加行_pd.Series的基本操作
- react 组件构建_为React构建星级评定组件
- (FMD)辉芒MCU开发指南
- 16Aspx.com-书通网中小学生免费在线学习网站源码 带采集带手机版帝国cms内核
- Request processin g failed; nested exception is feign.RetryableException: too many bytes written
热门文章
- 【buildroot适配】local.mk添加自带编译linux和uboot资源
- 应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信
- 用类比方式学习编程中函数递归(个人理解仅供参考)(内含汉诺塔问题的求解)
- PyQt5高清屏幕自适应设置 QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
- 集团容器云自定义巡检
- docker国内镜像源配置
- Tomcat下work目录的作用
- android 输入模糊匹配_Android通讯录模糊匹配,搜索实现高亮关键字(号码、首字母、简拼、全拼)...
- 1400.最大质子串
- 修改t3报表服务器,t3财务报表设置服务器