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


Posted in Python onAugust 09, 2019

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

首先还是Chrome浏览器抓包分析元素,这是网址:https://www.douyu.com/directory/all

发现所有房间的信息都是保存在一个无序列表中的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自动安装pip
Apr 24 Python
Python实现二叉搜索树
Feb 03 Python
pandas中Timestamp类用法详解
Dec 11 Python
Python实现k-means算法
Feb 23 Python
Python实现的txt文件去重功能示例
Jul 07 Python
Python线程同步的实现代码
Oct 03 Python
python组合无重复三位数的实例
Nov 13 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
Django发送邮件功能实例详解
Sep 02 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
pycharm 如何查看某一函数源码的快捷键
May 12 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 #Python
基于python二叉树的构造和打印例子
Aug 09 #Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 #Python
Django ORM 自定义 char 类型字段解析
Aug 09 #Python
解决使用export_graphviz可视化树报错的问题
Aug 09 #Python
Django中自定义admin Xadmin的实现代码
Aug 09 #Python
python输出决策树图形的例子
Aug 09 #Python
You might like
php cli模式学习(PHP命令行模式)
2013/06/03 PHP
Zend Studio 实用快捷键一览表(精心整理)
2013/08/10 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php生成PDF格式文件并且加密
2015/06/22 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
JS搜狐面试题分析
2016/12/16 Javascript
Javascript(es2016) import和require用法和区别详解
2017/08/11 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
seajs中最常用的7个功能、配置示例
2017/10/10 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
vue登录注册实例详解
2019/09/14 Javascript
python实现滑雪者小游戏
2020/02/22 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
2020/04/01 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
python 元组和列表的区别
2020/12/30 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
Keras保存模型并载入模型继续训练的实现
2021/02/20 Python
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
天网面试题
2013/04/07 面试题
幼儿园春游活动方案
2014/01/19 职场文书
小学生期末评语
2014/04/21 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
奥巴马开学演讲观后感
2015/06/12 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers