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计算文本文件行数的方法
Jul 06 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Python numpy 常用函数总结
Dec 07 Python
快速了解Python相对导入
Jan 12 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
python Tkinter版学生管理系统
Feb 20 Python
Python入门Anaconda和Pycharm的安装和配置详解
Jul 16 Python
python retrying模块的使用方法详解
Sep 25 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
pandas to_excel 添加颜色操作
Jul 14 Python
pandas按条件筛选数据的实现
Feb 20 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
codeigniter中view通过循环显示数组数据的方法
2015/03/20 PHP
Yii2超好用的日期和时间组件(值得收藏)
2016/05/05 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
javascript 触发事件列表 比较不错
2009/09/03 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
vue获取当前激活路由的方法
2018/03/17 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
浅谈Python NLP入门教程
2017/12/25 Python
Django返回HTML文件的实现方法
2020/09/17 Python
浅析python函数式编程
2020/09/26 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
MADE法国:提供原创设计师家具
2018/09/18 全球购物
NBA欧洲商店(西班牙):NBA Europe Store ES
2019/04/16 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
教育专业自荐书范文
2013/12/17 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
党员公开承诺践诺书
2014/03/25 职场文书
春节请假条
2014/04/11 职场文书
大学班级计划书
2014/04/29 职场文书
公司离职证明标准样本
2014/10/05 职场文书
质检员岗位职责
2015/02/03 职场文书
检察院起诉意见书
2015/05/20 职场文书
家长对学校的意见和建议
2015/06/03 职场文书