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简单实现刷新智联简历
Mar 30 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Python中多线程的创建及基本调用方法
Jul 08 Python
使用Python对MySQL数据操作
Apr 06 Python
python flask中静态文件的管理方法
Mar 20 Python
django的登录注册系统的示例代码
May 14 Python
Python中一些不为人知的基础技巧总结
May 19 Python
Pandas 合并多个Dataframe(merge,concat)的方法
Jun 08 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
python pytest进阶之conftest.py详解
Jun 27 Python
python sorted方法和列表使用解析
Nov 18 Python
python 实现压缩和解压缩的示例
Sep 22 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仿QQ验证码的实例分析
2013/07/01 PHP
PHP实现获取域名的方法小结
2014/11/05 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
jQuery判断多个input file 都不能为空的例子
2015/06/23 Javascript
继续学习javascript闭包
2015/12/03 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
微信小程序 request接口的封装实例代码
2017/04/26 Javascript
VUE中v-model和v-for指令详解
2017/06/23 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
NW.js 简介与使用方法
2018/02/01 Javascript
详解从Vue-router到html5的pushState
2018/07/21 Javascript
vue-cli3跨域配置的简单方法
2019/09/06 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
python实现2048小游戏
2015/03/30 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Django中的ajax请求
2018/10/19 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Django框架搭建的简易图书信息网站案例
2019/05/25 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
python中时间转换datetime和pd.to_datetime详析
2019/08/11 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
用python制作个音乐下载器
2021/01/30 Python
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
学生会干部自荐信
2014/02/04 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
小学四年级学生评语
2014/12/26 职场文书
安全员岗位职责
2015/02/10 职场文书
财政局个人总结
2015/03/04 职场文书