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操作MySQL的一些基本方法
Aug 16 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
python 获取毫秒数,计算调用时长的方法
Feb 20 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
python中的数据结构比较
May 13 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 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制作文本式留言板
2015/03/18 PHP
xtree.js 代码
2007/03/13 Javascript
使用prototype.js 的时候应该特别注意的几个问题.
2007/04/12 Javascript
Dom加载让图片加载完再执行的脚本代码
2008/05/15 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
jQuery 绑定事件到动态创建的元素上的方法实例
2013/08/18 Javascript
解析Javascript小括号“()”的多义性
2013/12/03 Javascript
JavaScript的strict模式与with关键字介绍
2014/02/08 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
第一章之初识Bootstrap
2016/04/25 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python中根据字符串调用函数的实现方法
2016/06/12 Python
django静态文件加载的方法
2018/05/20 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
医疗保健专业人士购物网站:Scrubs & Beyond
2017/02/08 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
奖学金自我鉴定范文
2013/10/03 职场文书
办公室文书岗位职责
2013/12/16 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
节能环保演讲稿
2014/08/28 职场文书
六年级语文教学反思
2016/03/03 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏