python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解


Posted in Python onDecember 22, 2020

基本思路:

首先用开发者工具找到需要提取数据的标签列

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用xpath定位需要提取数据的列表

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

然后再逐个提取相应的数据:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

保存数据到csv:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用开发者工具找到下一页按钮所在标签:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

利用xpath提取此标签对象并返回:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

调用点击事件,并循环上述过程:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

最终效果图:

python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解

代码:

from selenium import webdriver
import time
import re

class Douyu(object):

  def __init__(self):
    # 开始时的url
    self.start_url = "https://www.douyu.com/directory/all"
    # 实例化一个Chrome对象
    self.driver = webdriver.Chrome()
    # 用来写csv文件的标题
    self.start_csv = True

  def __del__(self):
    self.driver.quit()

  def get_content(self):
    # 先让程序两秒,保证页面所有内容都可以加载出来
    time.sleep(2)
    item = {}
    # 获取进入下一页的标签
    next_page = self.driver.find_element_by_xpath("//span[text()='下一页']/..")
    # 获取用于判断是否是最后一页的属性
    is_next_url = next_page.get_attribute("aria-disabled")
    # 获取存储信息的所有li标签的列表
    li_list = self.driver.find_elements_by_xpath("//ul[@class='layout-Cover-list']//li")
    
    # 提取需要的数据
    for li in li_list:
      
      item["user-id"] = li.find_element_by_xpath(".//div[@class='DyListCover-userName']").text
      item["img"] = li.find_element_by_xpath(".//div[@class='DyListCover-imgWrap']//img").get_attribute("src")
      item['class-name'] = li.find_element_by_xpath(".//span[@class='DyListCover-zone']").text
      item["click-hot"] = li.find_element_by_xpath(".//span[@class='DyListCover-hot']").text
      item["click-hot"] = re.sub(r'\n','',item['click-hot'])
      
      # 保存数据
      self.save_csv(item)
    
    # 返回是否有下一页和下一页的点击事件的标签,
    return next_page,is_next_url

  def save_csv(self,item):
    # 将提取存放到csv文件中的内容连接为csv格式文件
    str = ','.join([i for i in item.values()])

    with open('./douyu.csv','a',encoding='utf-8') as f:
      if self.start_csv:
        f.write("用户id,image,所属类,点击热度\n")
        self.start_csv = False
      # 将字符串写入csv文件
      f.write(str)
      f.write('\n')
    print("save success")

  def run(self):
    # 启动chrome并定位到相应页面
    self.driver.get(self.start_url)

    while True:
      # 开始提取数据,并获取下一页的元素
      next_page,is_next = self.get_content()
      if is_next!='false':
        break
      # 点击下一页
      next_page.click()

if __name__=='__main__':
  douyu_spider = Douyu()
  douyu_spider.run()

到此这篇关于python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解的文章就介绍到这了,更多相关python爬虫实现自动翻页爬取某鱼数据内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python制作CSDN免积分下载器
Mar 10 Python
用Python中的字典来处理索引统计的方法
May 05 Python
python 中random模块的常用方法总结
Jul 08 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
浅谈Python中(&,|)和(and,or)之间的区别
Aug 07 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
python实现大量图片重命名
Mar 23 Python
Python面向对象封装操作案例详解 II
Jan 02 Python
python 中的命名空间,你真的了解吗?
Aug 19 Python
Django中ORM的基本使用教程
Dec 22 #Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 #Python
Python 多进程原理及实现
Dec 21 #Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 #Python
python 用pandas实现数据透视表功能
Dec 21 #Python
python 生成正态分布数据,并绘图和解析
Dec 21 #Python
python statsmodel的使用
Dec 21 #Python
You might like
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
2010/10/12 PHP
phpadmin如何导入导出大数据文件及php.ini参数修改
2013/02/18 PHP
解析PHP处理换行符的问题 \r\n
2013/06/13 PHP
可以保证单词完整性的PHP英文字符串截取代码分享
2014/07/15 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
JavaScript delete操作符应用实例
2009/01/13 Javascript
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
加载 Javascript 最佳实践
2011/10/30 Javascript
JavaScript中的toDateString()方法使用详解
2015/06/12 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
Angular2 路由问题修复详解
2017/03/01 Javascript
js中的触发事件对象event.srcElement与event.target详解
2017/03/15 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
原生JavaScript实现拖动校验功能
2020/09/29 Javascript
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python使用生成器实现可迭代对象
2018/03/20 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
如何写出好的Java代码
2014/04/25 面试题
公司业务主管岗位职责
2013/12/07 职场文书
民主评议党员自我评议范文2014
2014/09/26 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers