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多进程编程下线程之间变量的共享问题
May 05 Python
Python Nose框架编写测试用例方法
Oct 26 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
Python一句代码实现找出所有水仙花数的方法
Nov 13 Python
Python 单元测试(unittest)的使用小结
Nov 14 Python
对Python信号处理模块signal详解
Jan 09 Python
利用Python绘制有趣的万圣节南瓜怪效果
Oct 31 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
python 下载m3u8视频的示例代码
Nov 11 Python
python re模块和正则表达式
Mar 24 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
URL Rewrite的设置方法
2007/01/02 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
Javascript new关键字的玄机 以及其它
2010/08/25 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
JavaScript检测弹出窗口是否已经关闭的方法
2015/03/24 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
浅谈react.js中实现tab吸顶效果的问题
2017/09/06 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
jQuery实现简单评论功能
2020/08/19 jQuery
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
[00:38]TI珍贵瞬间系列(二):笑
2020/08/26 DOTA
Python 实现简单的电话本功能
2015/08/09 Python
Python加密方法小结【md5,base64,sha1】
2017/07/13 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
如何用Anaconda搭建虚拟环境并创建Django项目
2020/08/02 Python
日本AOKI官方商城:AOKI西装
2020/06/11 全球购物
LINUX下线程,GDI类的解释
2012/04/17 面试题
初中毕业典礼演讲稿
2014/09/09 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server
为什么MySQL不建议使用SELECT *
2022/04/03 MySQL
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers