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基础教程之序列详解
Aug 29 Python
Python对列表排序的方法实例分析
May 16 Python
python实现马耳可夫链算法实例分析
May 20 Python
在Python中用has_key()方法查找键是否存在的教程
May 21 Python
Python实现提取谷歌音乐搜索结果的方法
Jul 10 Python
python计算两个数的百分比方法
Jun 29 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
python正则表达式匹配IP代码实例
Dec 28 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 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中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
网页设计常用的一些技巧
2006/12/22 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
JS的参数传递示例介绍
2014/02/08 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
js 获取站点应用名的简单实例
2016/08/18 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
VueJS全面解析
2016/11/10 Javascript
js 获取元素的具体样式信息getcss(实例讲解)
2017/07/05 Javascript
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
JavaScript实现矩形块大小任意缩放
2020/08/25 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
2016/06/29 Python
Python操作使用MySQL数据库的实例代码
2017/05/25 Python
浅析Python数据处理
2018/05/02 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
快速了解Python开发环境Spyder
2020/06/29 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
YSL圣罗兰美妆俄罗斯官网:Yves Saint Lauret RU
2020/09/23 全球购物
CSS实现fullpage.js全屏滚动效果的示例代码
2021/03/24 HTML / CSS
社会实践自我鉴定
2013/11/07 职场文书
班组长安全职责
2014/01/05 职场文书
如何写早恋检讨书
2014/09/10 职场文书
2014年医院工作总结
2014/11/20 职场文书
学生保证书格式
2015/02/27 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
MySQL 1130异常,无法远程登录解决方案详解
2021/08/23 MySQL
使用Apache Camel表达REST服务的方法
2022/06/10 Servers