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 时间操作例子和时间格式化参数小结
Apr 24 Python
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
Python 创建子进程模块subprocess详解
Apr 08 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Django中Forms的使用代码解析
Feb 10 Python
python获取中文字符串长度的方法
Nov 14 Python
Python递归函数实例讲解
Feb 27 Python
使用GitHub和Python实现持续部署的方法
May 09 Python
Python获取百度热搜的完整代码
Apr 07 Python
对象析构函数__del__在Python中何时使用
Mar 22 Python
python中mongodb包操作数据库
Apr 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
php检测用户是否用手机(Mobile)访问网站的类
2014/01/09 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
jquery中防刷IP流量软件影响统计的一点对策
2011/07/10 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
Es6 Generator函数详细解析
2018/02/24 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
vue-cli 为项目设置别名的方法
2019/10/15 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
python pdb调试方法分享
2014/01/21 Python
python实现员工管理系统
2018/01/11 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
django Model层常用验证器及自定义验证器详解
2020/07/15 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
Web Service面试题:如何搭建Axis2的开发环境
2012/06/20 面试题
基层干部十八大感言
2014/01/19 职场文书
教师党员承诺书
2014/03/25 职场文书
《地震中的父与子》教学反思
2014/04/10 职场文书
团队队名口号大全
2014/06/06 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
群众路线四风自我剖析材料
2014/10/08 职场文书