Python提取斗鱼美女图片--selenium requests两种方式

news2024/11/16 19:41:22

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、pandas是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.读入数据
  • 总结


前言

使用selenium,requests提取斗鱼美女数据

数据来源 斗鱼美女链接

一、selenium是干嘛的,与request的区别

Selenium和Requests是两种不同的Python库,它们各自用于不同的任务:

- Selenium是一个自动化测试工具,可以模拟用户在Web浏览器中的操作,包括点击、输入文本、提交表单等。它通常被用于爬取需要模拟用户行为才能访问的网站数据,比如需要登录才能访问的网站。

- Requests是一个用于HTTP请求的Python库。它可以发送GET、POST、PUT、DELETE等请求,并支持向HTTP请求中添加header、cookies等信息。它通常被用于爬取无需模拟用户行为的网站数据。

因此,Selenium 和 Requests 有以下区别:

- 任务领域不同:Selenium用于模拟用户在Web浏览器中的操作,Requests用于HTTP请求。
- 爬取方式不同:Selenium模拟用户在Web浏览器中的操作,可以模拟点击按钮、输入文本等操作;Requests则只是发起HTTP请求,不能进行类似的操作。
- 应用场景不同:Selenium主要用于爬取需要模拟用户行为才能访问的网站数据,Requests主要用于爬取无需模拟用户行为的网站数据。

在实际应用中,需要根据具体情况选择使用Selenium还是Requests,或者结合两种库进行使用。

二、数据的查看

1.查看美女图片所在的路径

 打开控制台数据(页面右击检查,点击元素出现以下页面) 

我们发现数据应该在ul列表标签下的li中,接下来,可以开始写代码了 

2.selenium操作第一页

代码如下(示例):

import json
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.edge.options import Options
from selenium.webdriver.edge.service import Service
import requests


# todo 每隔7一次循环
options = Options ()
options.add_argument ("--headless")
driver = webdriver.Edge (
    options=options,
    service=Service (executable_path=r'D:\pythonProject\爬虫\seleniumDemo\sserver\msedgedriver.exe')
)


# # todo 提取第一页的所有数据
def getValuesFromUrl():
    driver.get ('https://www.douyu.com/g_xingxiu')
    # 获取所有的li标签
    val = driver.find_elements (by=By.CLASS_NAME,
                               value=f'layout-Cover-item')
    for i in range (0, len(val)):
        data=val[i]
        img_source=data.find_elements(by=By.TAG_NAME,value="source")[1].get_attribute("srcset")
        print(f"第{i+1}张图片",img_source)

 但是,使用selenium并不能异步计算后序其他页面的数据

3.使用reques获取数据

点击网络的Fetch/XHR,并且在页面中点击第二页,找到名称数据中正确请求的数据

 

 

找到这个数据对应的异步请求网页

 

异步提交的python代码

# 异步传输
# 分页数据
def testByRequest():
    for j in range(1,5):
        url=f'https://www.douyu.com/wgapi/ordnc/live/web/room/mixList/2/1008/0/{j}'
        # 获取所有的li标签
        data=requests.get(url).text
        base=json.loads(data)
        # 获取图片
        base=base['data']['rl']
        for i in range(1,len(base)):
            img=base[i]['rs_ext'][-1]['rs16']
            print(f"第{j}页第{i}张图片为",img)

if __name__ == '__main__':
    testByRequest()

 结果如下

 

总结

Selenium和Requests是两种不同的Python库,它们各自用于不同的任务:

- Selenium是一个自动化测试工具,可以模拟用户在Web浏览器中的操作,包括点击、输入文本、提交表单等。它通常被用于爬取需要模拟用户行为才能访问的网站数据,比如需要登录才能访问的网站。

- Requests是一个用于HTTP请求的Python库。它可以发送GET、POST、PUT、DELETE等请求,并支持向HTTP请求中添加header、cookies等信息。它通常被用于爬取无需模拟用户行为的网站数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-每日一题【206.反转链表】

题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5]输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例 3: 输…

ChatGPT助力校招----面试问题分享(七)

1 ChatGPT每日一题:SPI通信协议的四种工作模式 问题:SPI通信协议的四种工作模式 ChatGPT:SPI(Serial Peripheral Interface)总线是一种同步串行通信协议,它在多种数字系统中得到了广泛应用。SPI总线有四种…

nodejs全局模块安装与cnpm

一、通过nodejs官网安装 通过nodejs官网下载后安装 二、验证安装 1、在键盘按下【winR】键,输入cmd,然后回车,打开命令行界面 2、进入命令提示符窗口,分别输入以下命令,显示版本号,则安装成功&#xff0…

【AcWing算法基础课】第二章 数据结构(部分待更)

文章目录 前言课前温习一、单链表核心模板1.1题目描述1.2思路分析1.3代码实现 二、双链表核心模板2.1题目描述2.2思路分析2.3代码实现 三、栈核心模板3.1题目描述3.2思路分析3.3代码实现 四、队列核心模板4.1题目描述4.2思路分析4.3代码实现 五、单调栈核心模板5.1题目描述5.2思…

医疗科技革新:探索互联网医院线上就诊模式

随着互联网的迅猛发展,医疗行业也在逐渐融合科技创新,为患者提供更加便捷、高效的医疗服务。互联网医院作为一种新型医疗模式,通过在线平台实现医生与患者的远程沟通和线上诊疗,成为了医疗科技领域的热门话题。 在本文中&#x…

Django框架-6

向服务器传参 通过url - path传参 path(articles/<int:year>/<int:month>/<slug:slug>/, views.article_detail),查询字符串方式传参 http://localhost:8000?key1value1&key2value2 ;&#xff08;body&#xff09;请求体的方式传参&#xff0c;比如文…

Windos新机配置Java开发环境

一. 安装JDK8 解压&#xff0c;然后配置环境变量即可 配置JAVA_HOME path里添加&#xff1a; 二. MySql数据库安装与配置 参考&#xff1a; https://blog.csdn.net/annita2019/article/details/117467992 1.解压&#xff0c; Path中添加环境变量 D:\CodeSupport\Java_se…

华为OD机试真题 JavaScript 实现【求最大连续bit数】【牛客练习题】

一、题目描述 求一个int类型数字对应的二进制数字中1的最大连续数&#xff0c;例如3的二进制为00000011&#xff0c;最大连续2个1。 二、输入描述 输入一个int类型数字。 三、输出描述 输出转成二进制之后连续1的个数。 四、解题思路 使用位运算来实现。 具体思路如下&…

投票链接步骤公众号投票链接制作制作投票网页链接

大家在选择投票小程序之前&#xff0c;可以先梳理一下自己的投票评选活动是哪种类型&#xff0c;目前有匿名投票、图文投票、视频投票、赛事征集投票等。 我们现在要以“笛乐悠扬”为主题进行一次投票活动&#xff0c;我们可以在在微信小程序搜索&#xff0c;“活动星”投票小程…

高手必备:JVM调优的常用命令和参数一网打尽!

大家好&#xff0c;我是小米&#xff01;在今天的技术分享中&#xff0c;我将和大家一起探讨JVM调优中的常用命令和参数。作为一名热爱技术的小伙伴&#xff0c;希望通过本篇文章的分享&#xff0c;能够帮助大家更好地理解和掌握JVM调优的方法和技巧。 JVM的结构 首先&#x…

C++ 预处理器

预处理器是一些指令&#xff0c;指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号&#xff08;#&#xff09;开头&#xff0c;只有空格字符可以出现在预处理指令之前。预处理指令不是 C 语句&#xff0c;所以它们不会以分号&#xff08;;&#xff09…

操作系统5——输入输出系统

本系列博客重点在深圳大学操作系统课程的核心内容梳理&#xff0c;参考书目《计算机操作系统》&#xff08;有问题欢迎在评论区讨论指出&#xff0c;或直接私信联系我&#xff09;。 梗概 本篇博客主要介绍操作系统第六章输入输出系统的相关知识。 目录 一、I/O&#xff08;…

6-如何创建正态分布数组?【视频版】

目录 问题视频解答 问题 视频解答 点击观看&#xff1a; 6-如何创建正态分布数组&#xff1f;

buffer_head数据结构

内核版本&#xff1a;5.9.0 数据结构 /** Historically, a buffer_head was used to map a single block* within a page, and of course as the unit of I/O through the* filesystem and block layers. Nowadays the basic I/O unit* is the bio, and buffer_heads are us…

互联网编程之多线程/线程池TCP服务器端程序设计

目录 需求 多线程TCP服务器 线程池TCP服务器 测试 日志模块 需求 多线程TCP服务器&#xff08;30分&#xff09;&#xff1a; 设计编写一个TCP服务器端程序&#xff0c;需使用多线程处理客户端的连接请求。客户端与服务器端之间的通信内容&#xff0c;以及服务器端的处理…

C语言进阶---自定类型详解(结构体+枚举+联合)

结构体 1、结构体类型的声明 1.1、结构的基础知识 结构是一些值得集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2、结构体类型的声明 struct tag {member-list; }variable-list;//写法一&#xff1a; struct Stu {char name[20];int age;…

【数据结构与算法】约瑟夫环(C/C++)

实践要求 1. 问题描述 约瑟夫问题的一种描述是&#xff1a;编号为1,2,…,n的n个人按顺时针方向围坐一圈&#xff0c;每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值m&#xff0c;从第一个人开始。按顺时针方向自1开始顺序报数&#xff0c;报到m时停止报数。报…

docker镜像fauria/vsftpd dockerfile解析(ENV命令,**占位符**)dockerfile命令、dockerfile指令

文章目录 fauria/vsftpddockerfile原始文件dockerfile解析 fauria/vsftpd fauria/vsftpd是一个由Docker Hub用户"fauria"创建的Docker镜像。这个镜像是基于CentOS 7构建的&#xff0c;包含了vsftpd&#xff08;Very Secure FTP Daemon&#xff09;服务&#xff0c;并…

NASA网站曝严重漏洞,或将沦为黑客钓鱼网站?

美国国家航空航天局&#xff08;NASA&#xff09;天体生物学专用网站存在一个严重的安全漏洞&#xff0c;可能通过伪装带有NASA名称的危险URL来诱骗用户访问恶意网站。 太空旅行无疑是危险的。然而&#xff0c;在访问NASA网站的时候也有可能如此。Cybernews研究团队发现了一个N…

Scala之泛型详解

泛型用于指定类或方法可以接受任意类型参数&#xff0c;参数在实际使用时才被确定&#xff0c;泛型可以有效地增强程序的适用性&#xff0c;使用泛型可以使得类或方法具有更强的通用性。泛型的典型应用场景是集合及集合中的方法参数&#xff0c;可以说同 Java 一样&#xff0c;…