还是分析一下大体的流程:

发现所有房间的信息都是保存在一个无序列表中的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爬取斗鱼所有直播房间信息过程详解相关推荐

  1. python定位相邻节点_Python selenium 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  2. python爬斗鱼直播_python selenium爬取斗鱼所有直播房间信息过程详解

    还是分析一下大体的流程: 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页 ...

  3. python爬取斗鱼_python selenium爬取斗鱼所有直播房间信息过程详解

    还是分析一下大体的流程: 首先还是Chrome浏览器抓包分析元素,这是网址:https://www.douyu.com/directory/all 发现所有房间的信息都是保存在一个无序列表中的li中, ...

  4. python定位相邻节点_Python selenium —— 父子、兄弟、相邻节点定位方式详解

    今天跟大家分享下selenium中根据父子.兄弟.相邻节点定位的方法,很多人在实际应用中会遇到想定位的节点无法直接定位,需要通过附近节点来相对定位的问题,但从父节点定位子节点容易,从子节点定位父节点. ...

  5. python中字符串切片取奇数_Python中的字符串切片(截取字符串)的详解

    Python中的字符串切片(截取字符串)的详解 字符串索引示意图 字符串切片也就是截取字符串,取子串 Python中字符串切片方法 字符串[开始索引:结束索引:步长] 切取字符串为开始索引到结束索引- ...

  6. python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  7. python在线翻译代码_Python 20行简单实现有道在线翻译的详解

    简介 主要是尝试简单的使用pyhton的爬虫功能,于是使用有道进行尝试,并没有进行深入的诸如相关api的调用. 以下是需要的POST数据 代码 以下是相关部分的代码: import urllib.re ...

  8. python串口数据分包_python TCP Socket的粘包和分包的处理详解

    概述 在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况.本文详细讲解解决该问题的步骤.使用的语言是Python.实际上解决该问题很简单,在应用层下,定义一个协议:消息头部+消息长度+ ...

  9. python音标1003python音标_python selenium 爬取百度翻译单词音标

    python selenium 小爬虫 主要流程 读取excel文件中的单词--利用selenium 去百度翻译中获取单词对应的音标--写入cvs文件 selenium 安装 环境配置略过 谷歌浏览器 ...

最新文章

  1. java runnable 启动_Java开发笔记(九十七)利用Runnable启动线程
  2. 二极管7种应用电路详解之五
  3. git tag 介绍
  4. php fopen 错误,php fopen函数失败怎么办
  5. 3.1.3 操作系统覆盖技术与交换技术的思想
  6. Queue(队列)-Swift实现与广度优先搜索应用
  7. oracle中 sql语句:start with .. connect by prior.. 用法
  8. 迁移 Docker 到其它磁盘目录
  9. 探究Redis两种持久化方式下的数据恢复
  10. Jsp页面的几种传参方式
  11. Mybatis源码阅读之一——工厂模式与SqlSessionFactory
  12. 图像处理技术上的空间域和空间频率域
  13. ios睡眠分析 卧床 睡眠_iPhone睡眠模式:教你设置追踪睡眠排程与提升睡眠品质...
  14. 算法学习-求平方根函数
  15. 计算机硬件及冯诺伊曼结构
  16. python pd Series 添加行_pd.Series的基本操作
  17. react 组件构建_为React构建星级评定组件
  18. (FMD)辉芒MCU开发指南
  19. 16Aspx.com-书通网中小学生免费在线学习网站源码 带采集带手机版帝国cms内核
  20. Request processin g failed; nested exception is feign.RetryableException: too many bytes written

热门文章

  1. 【buildroot适配】local.mk添加自带编译linux和uboot资源
  2. 应用案例 | 升级OPC Classic到OPC UA,实现安全高效的数据通信
  3. 用类比方式学习编程中函数递归(个人理解仅供参考)(内含汉诺塔问题的求解)
  4. PyQt5高清屏幕自适应设置 QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
  5. 集团容器云自定义巡检
  6. docker国内镜像源配置
  7. Tomcat下work目录的作用
  8. android 输入模糊匹配_Android通讯录模糊匹配,搜索实现高亮关键字(号码、首字母、简拼、全拼)...
  9. 1400.最大质子串
  10. 修改t3报表服务器,t3财务报表设置服务器