python—selenium爬虫
文章目录
Selenium爬虫与Requests在多个方面存在显著差异,这些差异主要体现在它们的工作原理、功能特点、适用场景以及性能表现上。在某些情况下,我们使用Selenium爬取文本内容更好,这里我们先将其与Requests进行对比。
Selenium与Requests对比
一、工作原理
Requests:
- Requests是一个HTTP库,用于发送各种HTTP请求(如GET、POST等)。
- 它直接发送HTTP请求到服务器,并接收服务器的响应,不涉及浏览器环境的模拟。
Selenium: - Selenium是一个自动化测试工具,通过控制浏览器来模拟用户的各种行为,如点击、滚动、填写表单等。
- 它通过浏览器驱动程序与浏览器进行交互。
二、功能特点
Requests:
- 简单、快速、轻量级,易于使用和集成。
- 主要用于发送HTTP请求和接收响应,适用于静态网页内容的抓取。
- 不具备浏览器自动化功能。
Selenium:
- 功能强大,能够模拟用户与浏览器的所有交互行为。
- 适用于动态网页、单页面应用(SPA)以及需要用户交互的网页内容的抓取。
三、性能表现
Requests:
- 由于不加载JavaScript或CSS等资源,响应时间更短,资源消耗更少。
- 在处理静态网页内容时,性能表现优异。
Selenium:
- 需要加载完整的页面资源,因此速度相对较慢。
- 占用更多的CPU和内存资源,特别是在处理多个浏览器实例或并发请求时。
综上所述,Selenium爬虫与Requests在多个方面存在显著差异。选择哪个工具取决于具体的项目需求、网页类型以及性能要求。对于简单的静态网页内容抓取,Requests可能是更合适的选择;而对于复杂的动态网页、需要用户交互的网页或Web应用程序的抓取,Selenium则更具优势。
下载对应驱动
在使用Selenium之前,我们需要先下载对应浏览器的驱动程序(如 Edge 驱动程序)来与浏览器进行交互。下面我们讲解如何安装驱动。
1.首先我们需要打开edge浏览器,打开设置,找到“关于Microsoft Edge”,点击进入查看浏览器版本。
图例:
2.查找版本之后,搜索edge驱动下载,进入下载页面,选择对应的版本下载就可以。
图例:
下载完成之后,将文件放在含有python的文件夹内(注意一定要放在一个文件夹下),这样我们就可以使用Selenium爬取脚本了。
使用Selenium爬取脚本实例
下面我们使用Selenium库和Edge浏览器(通过Edge WebDriver)来自动化访问网页并抓取数据的Python脚本。
1.导入必要的库和模块:
import time
# pip install selenium
# 下载对应版本的驱动 放在python文件下
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.edge.options import Options
- time:用于在代码执行过程中添加延时。
- webdriver从selenium包中导入,用于控制浏览器。
- By从selenium.webdriver.common.by中导入,用于指定元素定位的方式(如XPath、CSS选择器等)。
- expected_conditions(别名EC)和WebDriverWait从selenium.webdriver.support和selenium.webdriver.support.ui中导入,用于设置等待条件,以便在元素可用之前暂停执行。
- Options从selenium.webdriver.edge.options中导入,用于配置Edge浏览器的启动选项,如设置为无头模式。
2.设置Edge浏览器的无头模式:
if __name__ == '__main__':
# 无头模式
opt = Options()
opt.add_argument("--headless")
- 创建Options实例,并通过add_argument(“–headless”)设置浏览器在无头模式下运行,即不显示浏览器界面。
3.初始化Edge WebDriver:
driver = webdriver.Edge(options=opt)
- 使用webdriver.Edge(options=opt)创建Edge WebDriver实例,传入之前配置的选项opt。
4.访问网页:
# 请求页面
driver.get('https://101.qq.com/#/hero')
- 使用driver.get(‘https://101.qq.com/#/hero’)访问指定的网页地址。
5.等待页面元素加载:
# 强制等待
time.sleep(10)
# 等待某个元素加载完成
WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.XPATH,"//ul[@class='hero-list']"))
)
- 使用WebDriverWait和EC.presence_of_element_located等待页面上某个元素(这里是类名为hero-list的ul元素)出现。这是一种比time.sleep()更智能的等待方式,因为它会等待直到条件满足(元素出现)或达到最大等待时间(这里是10秒)。
6.查找并遍历列表元素:
li_list = driver.find_elements(By.XPATH,"//ul[@class='hero-list']/li")
for li in li_list:
img_url = li.find_element(By.XPATH,"div/div/img").get_attribute("src")
hero_name = li.find_element(By.XPATH,"div/p").text
print(img_url,hero_name)
- 使用find_elements方法通过XPath定位到ul[@class=‘hero-list’]下的所有li元素,并将它们存储在li_list列表中。
- 遍历li_list中的每个li元素,对于每个元素:
- 使用find_element和XPath定位到该li元素内的img标签,并获取其src属性(即图片URL)。
- 同样地,定位到该li元素内的p标签,并获取其文本内容(即英雄名称)。
- 打印出图片URL和英雄名称。
7.关闭浏览器:
driver.close()
pass
- 使用driver.close()关闭浏览器。
这段代码演示了如何使用Selenium和Edge WebDriver来自动化访问一个网页,等待页面上的特定元素加载完成,然后抓取该页面上特定列表项中的图片URL和文本内容。
原文地址:https://blog.csdn.net/2301_77698138/article/details/140645449
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!