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 json模块使用实例
Apr 11 Python
python去除扩展名的实例讲解
Apr 23 Python
python 拼接文件路径的方法
Oct 23 Python
python中的tcp示例详解
Dec 09 Python
python使用thrift教程的方法示例
Mar 21 Python
Django admin model 汉化显示文字的实现方法
Aug 12 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
关于windows下Tensorflow和pytorch安装教程
Feb 04 Python
python中format函数如何使用
Jun 22 Python
使用pytorch 筛选出一定范围的值
Jun 28 Python
python UDF 实现对csv批量md5加密操作
Jan 01 Python
pandas提升计算效率的一些方法汇总
May 30 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发送邮件类代码附详细说明
2008/07/10 PHP
php删除数组元素示例分享
2014/02/17 PHP
如何解决PHP无法实现多线程的问题
2015/09/25 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
javascript对select标签的控制(option选项/select)
2013/01/31 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
js实现不提交表单获取单选按钮值的方法
2015/08/21 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
Javascript基础教程之比较null和undefined值
2016/05/16 Javascript
全面解析jQuery $(document).ready()和JavaScript onload事件
2016/06/08 Javascript
Javascript中prototype的使用详解
2016/06/18 Javascript
AngularJS入门教程之ng-class 指令用法
2016/08/01 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
vue2里面ref的具体使用方法
2017/10/27 Javascript
jQuery.extend 与 jQuery.fn.extend的用法及区别实例分析
2018/07/25 jQuery
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
2019/06/10 jQuery
python自动格式化json文件的方法
2015/03/11 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
Pymysql实现往表中插入数据过程解析
2020/06/02 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
招商经理岗位职责
2013/11/16 职场文书
销售经理岗位职责
2014/03/16 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
北京天坛导游词
2015/02/12 职场文书
实习班主任自我评价
2015/03/11 职场文书
2015年推普周活动方案
2015/05/06 职场文书
2015入党自传书范文
2015/06/26 职场文书
大学校园招聘会感想
2015/08/10 职场文书