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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
python实现从web抓取文档的方法
Sep 26 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
讲解Python中if语句的嵌套用法
May 14 Python
Python实现删除文件中含“指定内容”的行示例
Jun 09 Python
python实现数据写入excel表格
Mar 25 Python
Python检测网络延迟的代码
May 15 Python
Python 实现文件打包、上传与校验的方法
Feb 13 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
利用Selenium添加cookie实现自动登录的示例代码(fofa)
May 08 Python
Python实现天气查询软件
Jun 07 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
日本十大最佳动漫,全都是二次元的神级作品
2019/10/05 日漫
PHP Token(令牌)设计
2008/03/15 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
php接口技术实例详解
2016/12/07 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
angular2倒计时组件使用详解
2017/01/12 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
2017/03/24 jQuery
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
2018/12/06 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
python语言元素知识点详解
2019/05/15 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
如何向scrapy中的spider传递参数的几种方法
2020/11/18 Python
python中四舍五入的正确打开方式
2021/01/18 Python
利用纯CSS3实现tab选项卡切换示例代码
2016/09/21 HTML / CSS
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
大学生职业规划书的范本
2014/02/18 职场文书
法院授权委托书范文
2014/08/02 职场文书
玩手机检讨书1000字
2014/10/20 职场文书
2014群众路线学习笔记
2014/11/06 职场文书
村干部任职承诺书
2015/01/21 职场文书
2015年艾滋病宣传活动总结
2015/03/27 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
大学生奖学金获奖感言(范文)
2019/08/15 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python