当前位置: 首页 > news >正文

Pyhton爬虫使用Selenium实现浏览器自动化操作抓取网页

        第三方库Selenium主要是用来抓取动态生成的网页数据,有些网站的内容要下拉网页才会动态加载,特别是那些使用javaScript渲染的内容。当然Selenium还可用于自动化浏览器操作,比如编写一个自动抢火车票的python脚本,这并不难实现。接下了我将通过用Selenium模拟用户的操作来抓取网页。

pip install selenium  # 这是下载Selenium的终端命令

        我使用的是edge浏览器,谷歌浏览器也是一样的,不过初始化webdriver用'driver = webdriver.chrome()',为了简便,我挑选在百度官网上去抓取一些表情包图片。同样我将这些步骤封装成了一个函数,不过因为爬取网页需要分析特定的网页结构,所以能够复用的地方有限,该函数只能用于百度官网,因为我也不确定其他网站的输入框input元素的id是不是"kw"。

        首先,我要模拟用户在百度官网上输入“表情包”到搜索框。search_box1.send_keys(search_name)该函数会将search_name的值传递给search_box1(这是获取的页面input输入框元素)。同时用函数search_box1.send_keys(Keys.RETURN)模拟用户的点击回车操作。
        这个函数有两个参数,第一个是搜索的内容,可以换成其他的,但因为该函数要抓取的是图片URL,所以范围也是有限。第二个是默认参数,默认值为'https://www.baidu.com'。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import timedef get_image_urls(search_name="表情包",url="https://www.baidu.com"):# 初始化 WebDriver(以 Edge 为例)driver = webdriver.Edge()driver.get(url)wait = WebDriverWait(driver, 10)search_box1 = wait.until(EC.element_to_be_clickable((By.ID, "kw")))search_box1.send_keys(search_name)  # 将值为"表情包"的字符串变量传递time.sleep(2) search_box1.send_keys(Keys.RETURN)  # 模拟用户输入回车

        在百度搜索内容时,默认会将搜索结果中的标题以<h3>标签显示。我这里定位到搜索结果的第一个,并用first_a.click()模拟用户点击链接跳转。但是要注意的是由于点击链接会跳转到新窗口,所以我们要用switch_to.windows来切换页面。由于本文旨在讨论Selenium的自动化操作,涉及爬虫的内容并不会很多,所以在接下来的抓取图片URL的操作,只是简单抓取可见的img标签,对于可能还未被加载的图片不在过多讨论。

     # 等待搜索结果的加载,并寻找第一个搜索结果first_h3 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "h3")))print(first_h3.text)# 查找 h3 内部的第一个 a 标签first_a = first_h3.find_element(By.TAG_NAME, "a")  # 找到第一个子标签 atime.sleep(2) # 点击 a 标签以跳转first_a.click()# 等待一些时间以观察跳转效果(可选)time.sleep(2)driver.switch_to.window(driver.window_handles[1])  # 切换到新窗口

       因为我们访问的网站能够实现无限滚动加载,所以我们会在外部用while循环来控制下拉次数。并使用max_scrolls = 10和scroll_count = 0搭配使用来控制下拉次数为10次。

    # 这里将模拟用户下拉操作十次max_scrolls = 10scroll_count = 0while scroll_count < max_scrolls:last_height = driver.execute_script("return document.body.scrollHeight")driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")time.sleep(2)new_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breakscroll_count += 1img_tags = driver.find_elements(by=By.ID, value='imgid')print("找到的图像标签数:", len(img_tags))  # 打印找到的图像标签数量for img in img_tags:imgitems = img.find_elements(by=By.CLASS_NAME, value='imgitem')for item in imgitems:print(item.text)driver.quit()

        以上所有代码都是在函数get_image_urls()里,不过在while循环里调用了我们自己编写的滚动函数scroll_to_bottom(),这是模拟用户往下拉加载的函数,该函数在上面的程序中被调用。 

def scroll_to_bottom(driver):last_height = driver.execute_script("return document.body.scrollHeight")while True:# Scroll down to the bottomdriver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# Wait for new content to loadtime.sleep(2)  # 可以根据实际情况调整等待时间# Calculate new scroll height and compare with last heightnew_height = driver.execute_script("return document.body.scrollHeight")if new_height == last_height:break  # 如果没有新的内容加载,退出循环last_height = new_height

        本程序涉及使用url地址初始化一个浏览器实例,浏览器自动化操作使用send_keys()来模拟用户的输入以及按键(如回车键),同时使用click()函数来模拟用户点击链接,并用法都不难。以上程序在下载Selenium后就可以直接运行,如果有问题的欢迎在评论区留言!

相关文章:

Pyhton爬虫使用Selenium实现浏览器自动化操作抓取网页

第三方库Selenium主要是用来抓取动态生成的网页数据&#xff0c;有些网站的内容要下拉网页才会动态加载&#xff0c;特别是那些使用javaScript渲染的内容。当然Selenium还可用于自动化浏览器操作&#xff0c;比如编写一个自动抢火车票的python脚本&#xff0c;这并不难实现。接…...

矩阵学习过程中的一些思考

2024.09.27&#xff08;学习鸢尾花书_矩阵力量_Ch20&#xff09; &#xff08;1&#xff09;所有中心过原点的椭圆都可以用一个二维矩阵表示&#xff0c;且特征值表示长短轴长度&#xff0c;特征向量表示长短轴所在方向的单位向量&#xff08;表征椭圆旋转方向&#xff09;&am…...

初识Django

前言: 各位观众老爷们好&#xff0c;最近几个月都没怎么更新&#xff0c;主要是最近的事情太多了&#xff0c;我也在继续学习Django框架&#xff0c;之前还参加了一些比赛&#xff0c;现在我会开始持续更新Django的学习&#xff0c;这个过程会比较久&#xff0c;我会把我学习的…...

VirtualBox虚拟机连接宿主机并能够上网(小白向)

现存问题 windows系统主要使用vmare和virtualbox两种虚拟机&#xff0c;virtualbox相对于vmare更加轻便&#xff0c;但少有博客能够详细说明使用virtualbox的教程。踩了网上的坑后&#xff0c;决定写一篇文章介绍virtualbox虚拟机上网的流程。 需求 1. virtualbox虚拟机与宿主机…...

深度学习每周学习总结J1(ResNet-50算法实战与解析 - 鸟类识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 设置GPU2. 导入数据及处理部分3. 划分数据集4. 模型构建部分5. 设置超参数&#xff1a;定义损失函数&#xff0c;学习率&a…...

商家营销工具架构升级总结

今年以来&#xff0c;商家营销工具业务需求井喷&#xff0c;需求数量多且耗时都比较长&#xff0c;技术侧面临很大的压力。因此这篇文章主要讨论营销工具前端要如何应对这样大规模的业务需求。 问题拆解 我们核心面对的问题主要如下&#xff1a; 1. 人力有限 我们除了要支撑存量…...

移动硬盘无法读取:问题解析与高效数据恢复实战

一、移动硬盘无法读取的困扰 在数字化时代&#xff0c;移动硬盘作为数据存储和传输的重要媒介&#xff0c;承载着大量珍贵的数据资源。然而&#xff0c;当移动硬盘突然无法读取时&#xff0c;我们往往会陷入深深的困扰之中。这种无法读取的现象可能表现为插入电脑后毫无反应、…...

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速

20241005给荣品RD-RK3588-AHD开发板刷Rockchip原厂的Android12时使用iperf3测网速 2024/10/5 14:06 对于荣品RD-RK3588-AHD开发板&#xff0c;eth1位置上的PCIE转RJ458的以太网卡是默认好用的&#xff01; PCIE TO RJ45&#xff1a;RTL8111HS 被识别成为eth0了。inet addr:192.…...

node配置swagger

安装swagger npm install swagger-jsdoc swagger-ui-express 创建 swagger.js 配置文件 ​ const path require(path); const express require(express); const swaggerUI require(swagger-ui-express); const swaggerJsDoc require(swagger-jsdoc); // 修改 swaggerDoc…...

MATLAB plot画线的颜色 形状

文章目录 前言一、MATLAB plot画线的颜色 形状&#xff1f;颜色选项标记选项示例代码详细说明 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 项目需要&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、MA…...

Goland使用SSH远程Linux进行断点调试 (兼容私有库)

① 前置需求 ssh远程的 Linux 服务器必须安装 高于本地的 Go推荐golang 安装方式使用 apt yum snap 等系统自管理方式&#xff0c;&#xff08;要安装最新版本的可以找找第三方源&#xff09;&#xff0c;如无特殊需求不要自行编译安装golang ② Goland设置 2.1、设置项处理…...

LLM | Ollama WebUI 安装使用(pip 版)

Open WebUI (Formerly Ollama WebUI) 也可以通过 docker 来安装使用 1. 详细步骤 1.1 安装 Open WebUI # 官方建议使用 python3.11&#xff08;2024.09.27&#xff09;&#xff0c;conda 的使用参考其他文章 conda create -n open-webui python3.11 conda activate open-web…...

Three.js基础内容(一)

目录 一、几何体顶点和模型 1.1、点模型对象(Points)渲染顶点数据 1.2、线模型(Line)渲染顶点数据&#xff08;画个心&#xff09; 1.3、网格模型(Mesh)渲染顶点数据(三角形概念) 1.4、构建一个矩形平面几何体 1.5、几何顶点索引数据 1.6、顶点法线数据 1.7、查看three…...

网站建设制作需要注意

网站建设制作不仅仅是简单的技术活&#xff0c;更是一个企业或个人在互联网上展示自己形象和实力的重要手段。本文将探讨网站建设制作的重要性、步骤和关键要素。 1. 网站建设的重要性 1.1 品牌形象与宣传 一个精心设计的网站能够突显企业或个人的品牌形象&#xff0c;传递清晰…...

【Python】Uvicorn:Python 异步 ASGI 服务器详解

Uvicorn 是一个为 Python 设计的 ASGI&#xff08;异步服务器网关接口&#xff09;Web 服务器。它填补了 Python 在异步框架中缺乏一个最小化低层次服务器/应用接口的空白。Uvicorn 支持 HTTP/1.1 和 WebSockets&#xff0c;是构建现代异步Web应用的强大工具。 ⭕️宇宙起点 &a…...

类型转换【C++提升】(隐式转换、显式转换、自定义转换、转换构造函数、转换运算符重载......你想知道的全都有)

更多精彩内容..... &#x1f389;❤️播主の主页✨&#x1f618; Stark、-CSDN博客 本文所在专栏&#xff1a; C系列语法知识_Stark、的博客-CSDN博客 座右铭&#xff1a;梦想是一盏明灯&#xff0c;照亮我们前行的路&#xff0c;无论风雨多大&#xff0c;我们都要坚持不懈。 一…...

微信小程序hbuilderx+uniapp+Android 新农村综合风貌旅游展示平台

目录 项目介绍支持以下技术栈&#xff1a;具体实现截图HBuilderXuniappmysql数据库与主流编程语言java类核心代码部分展示登录的业务流程的顺序是&#xff1a;数据库设计性能分析操作可行性技术可行性系统安全性数据完整性软件测试详细视频演示源码获取方式 项目介绍 小程序端…...

【AI大模型】使用Embedding API

一、使用OpenAI API 目前GPT embedding mode有三种&#xff0c;性能如下所示&#xff1a; 模型每美元页数MTEB得分MIRACL得分text-embedding-3-large9,61554.964.6text-embedding-3-small62,50062.344.0text-embedding-ada-00212,50061.031.4 MTEB得分为embedding model分类…...

面试速通宝典——11

188. 总结static的应用和作用 函数体内static变量的作用范围为该函数体&#xff0c;不同于auto变量&#xff0c;该变量的内存只被分配一次&#xff0c;因此其值在下次调用时仍维持上次的值。在模块内的static全局变量可以被模块内所用函数访问&#xff0c;但不能被模块外其他函…...

python:reportlab 将多个图片合并成一个PDF文件

承上一篇&#xff1a;java&#xff1a;pdfbox 3.0 去除扫描版PDF中文本水印 # 导出扫描版PDF文件中每页的图片文件 java -jar pdfbox-app-3.0.3.jar export:images -prefixtest -i your_book.pdf 导出 Writing image: test-1.jpg Writing image: test-2.jpg Writing image: t…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...