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实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
OpenCV 轮廓检测的实现方法
Jul 03 Python
python3.7 sys模块的具体使用
Jul 22 Python
python实现的发邮件功能示例
Sep 11 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
python 使用cx-freeze打包程序的实现
Mar 14 Python
Python 没有main函数的原因
Jul 10 Python
详解python中GPU版本的opencv常用方法介绍
Jul 24 Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
Feb 01 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
无数据库的详细域名查询程序PHP版(1)
2006/10/09 PHP
允许phpmyadmin空密码登录的配置方法
2011/05/29 PHP
PhpDocumentor 2安装以及生成API文档的方法
2014/05/21 PHP
2014年最新推荐的10款 PHP 开发框架
2014/08/01 PHP
如何利用http协议发布博客园博文评论
2015/08/03 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
判断对象是否Window的实现代码
2012/01/10 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
JS+CSS简单树形菜单实现方法
2015/09/12 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
Python时区设置方法与pytz查询时区教程
2013/11/27 Python
python直接访问私有属性的简单方法
2016/07/25 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
python cumsum函数的具体使用
2019/07/29 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
2019/08/12 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
在win64上使用bypy进行百度网盘文件上传功能
2020/01/02 Python
python数字类型math库原理解析
2020/03/02 Python
html5 浏览器支持 如何让所有的浏览器都支持HTML5标签样式
2012/12/07 HTML / CSS
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
工程业务员岗位职责
2013/12/31 职场文书
党员批评与自我批评
2014/02/12 职场文书
学生周末长期请假条
2014/02/15 职场文书
工程售后服务承诺书
2014/05/21 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书