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

小白从零开始勇闯人工智能:爬虫初级篇(Selenium库)

引言

在人工智能时代,获取数据是第一步。爬虫技术能帮我们打开网页背后的信息。对于初学者来说,Selenium是一个非常友好的入门选择——它不仅能获取网页数据,还能模拟真实用户的操作,比如点击按钮、输入文字、上传文件等。我们之前学习的requests库虽然简单高效,但它只能获取静态网页内容。现在许多网站都使用JavaScript动态加载数据,这时候就需要Selenium库了。它可以等待页面完全加载,获取渲染后的完整内容,就像你用浏览器看到的那样。

一、Selenium基础知识

1、什么是Selenium?

Selenium最初是为Web应用程序测试而生的工具。Selenium可以录制我们的操作,然后自动重复执行,就像一个不知疲倦的测试员。但既然Selenium能控制浏览器,那为什么不把它用来抓取数据呢?于是,Selenium在爬虫领域也开始应用了起来。

2、Selenium工作原理

Selenium的工作原理为:首先,我们编写的Python代码通过调用Selenium库发出指令;随后,这些指令被传递给对应浏览器的WebDriver驱动,该驱动将代码命令转换为浏览器能直接理解并执行的底层操作,最后,浏览器根据接收到的命令完成相应的网页交互。不同的浏览器需要各自专属的WebDriver程序,并且必须确保WebDriver的版本与浏览器版本严格匹配,以保证整个通信链路的顺畅和功能的正常运行。

Python代码 → Selenium库 → WebDriver驱动 → 浏览器

二、环境搭建

1、安装Selenium库

打开命令行(Windows用户按Win+R,输入cmd),输入:

pip install selenium==4.11.0 -i https://pypi.mirrors.ustc.edu.cn/simple/

2、下载浏览器驱动

先查看浏览器版本:

1)、Edge浏览器:右上角三个点 → 帮助和反馈 → 关于Microsoft Edge

2)、Chrome浏览器:右上角三个点 → 帮助 → 关于Google Chrome

下载地址:

Edge驱动:https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ Chrome驱动:https://chromedriver.storage.googleapis.com/index.html Firefox驱动:https://github.com/mozilla/geckodriver/releases

3、配置驱动路径

Windows把下载的msedgedriver.exe(Edge)或chromedriver.exe(Chrome)放到Python安装目录的Scripts文件夹里,也可以者任何位置,但要在代码中指定完整路径。

4、验证安装是否成功

创建一个测试文件:如果看到浏览器自动打开并显示百度页面,则代表环境配置成功。

from selenium import webdriver from selenium.webdriver.edge.options import Options edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('https://www.baidu.com') print("浏览器已成功打开!") input("按回车键关闭浏览器...") driver.quit()

三、Selenium基础操作

1、打开你的第一个网页

使用Selenium进行网页自动化操作时,首先需要从selenium库中导入webdriver模块以及针对特定浏览器(如Edge)的配置选项Options,并通过binary_location参数指定浏览器程序的准确路径来初始化浏览器选项。接着,利用配置好的选项创建并启动对应的WebDriver实例,该实例会控制一个真实的浏览器窗口;随后,调用driver.get()方法导航至目标网址,并使用time.sleep()短暂暂停以便观察页面加载效果;最后,为确保资源释放,必须调用driver.quit()方法来完全关闭浏览器及相关的驱动程序。

from selenium import webdriver from selenium.webdriver.edge.options import Options import time # 创建浏览器选项 edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" # 启动浏览器 driver = webdriver.Edge(options=edge_options) # 访问网页 driver.get('https://www.baidu.com') # 等待5秒,看看效果 time.sleep(5) # 关闭浏览器 driver.quit()

2、同时打开多个标签页

在Selenium中,可以通过执行JavaScript代码实现同时打开并管理多个标签页,首先配置并启动Edge浏览器驱动,使用driver.get()方法打开初始网页;随后,利用driver.execute_script()执行window.open()函数在新标签页中依次打开其他指定网址。通过driver.window_handles可以获取所有标签页的窗口句柄,并使用driver.switch_to.window()方法切换到目标标签页进行后续操作,从而实现在同一浏览器中同时打开多个网页的效果。

from selenium import webdriver from selenium.webdriver.edge.options import Options edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) # 先打开百度 driver.get('https://www.baidu.com') # 在新标签页中打开B站 driver.execute_script("window.open('https://www.bilibili.com','_blank');") # 再打开一个学习网站 driver.execute_script("window.open('https://www.shuyishe.com','_blank');") # 获取所有标签页的句柄 handles = driver.window_handles print(f"当前打开了 {len(handles)} 个标签页") # 切换到第二个标签页(B站) driver.switch_to.window(handles[1]) print("现在显示的是B站页面") input("按回车键关闭所有页面...") driver.quit()

3、获取网页源代码

在Selenium中,获取网页源代码首先要配置并启动Edge浏览器驱动并导航至目标网页,随后通过driver.page_source属性即可获取浏览器当前已渲染完成的完整HTML代码,可以对其内容进行查看或将其保存到本地文件,最后通过driver.quit()关闭浏览器。

from selenium import webdriver from selenium.webdriver.edge.options import Options edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('https://www.baidu.com') # 获取渲染后的完整HTML代码 html_source = driver.page_source # 查看前1000个字符 print(html_source[:1000]) # 保存到文件 with open('baidu_page.html', 'w', encoding='utf-8') as f: f.write(html_source) driver.quit()

四、网页交互

1、在搜索框输入文字

通过Selenium在网页搜索框中输入文字首先要配置并启动Edge浏览器驱动,并导航至目标网页;随后,利用driver.find_element方法配合定位策略来定位页面的输入框元素;定位成功后,调用元素的send_keys方法即可将指定文本(如“Python编程”)输入到搜索框中。如果页面存在多个相似元素,则需改用find_elements获取元素列表并通过索引选取目标元素,最后通过driver.quit()关闭浏览器。

from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('https://www.bilibili.com/') # 方法1:通过标签名找到输入框 #search_box = driver.find_element(by=By.TAG_NAME, value="input") #search_box.send_keys("Python编程") # 方法2:如果页面有多个input,可以用索引 driver.find_elements(by=By.TAG_NAME, value="input")[0].send_keys("Python") input("看看输入框里是不是有文字了?按回车关闭...") driver.quit()

2、自动搜索:输入文字并回车

通过配置并启动Edge浏览器驱动并导航至Bilibili网站后,可使用Selenium的find_element方法定位页面的输入框元素,随后调用send_keys方法在其中输入“Python教程”并组合模拟按下回车键(通过Keys.RETURN)以触发搜索。

from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.by import By edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('http://www.bilibili.com') # 找到搜索框,输入Python,然后按回车 search_box = driver.find_element(by=By.TAG_NAME, value="input") search_box.send_keys("Python教程" + Keys.RETURN) # 等待页面加载 import time time.sleep(3) print("搜索完成!页面标题是:", driver.title) driver.quit()

3、上传文件:百度识图

通过配置并启动Edge浏览器驱动并访问百度识图的上传页面后,使用Selenium的find_element方法通过By.NAME定位属性名为file的文件上传输入框元素,随后调用send_keys方法将待上传图片的完整本地路径输入至该元素,从而触发文件上传流程;上传后通过短暂等待确保识别完成,再利用By.CLASS_NAME定位到显示识别结果的元素,获取并打印其文本内容,最后就完成了从网页上传图片到获取识别结果。

from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By import time edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('https://graph.baidu.com/pcpage/index?tpl_from=pc') # 方法1:通过name属性找到文件上传input input_element = driver.find_element(by=By.NAME, value="file") # 输入图片的完整路径(记得改成你自己的图片路径) input_element.send_keys(r"D:\python\PythonProject1\R-C.jpg") # 等待识别结果 time.sleep(5) # 获取识别结果 result_element = driver.find_element(by=By.CLASS_NAME, value="graph-guess-word") print("百度识图认为这张图片是:", result_element.text) driver.quit()

五、定位元素大法

1、八大定位方法

八大元素定位方法中,可以通过多种策略精准定位网页上的目标元素:这包括通过唯一标识的ID、通过表单元素的NAME、通过样式的CLASS_NAME、通过HTML标签类型的TAG_NAME、通过精确或部分文本匹配链接的LINK_TEXT与PARTIAL_LINK_TEXT,以及功能强大且灵活的CSS_SELECTOR和XPATH。

# 1. 通过ID定位(最准确,但ID可能动态变化) # driver.find_element(By.ID, "kw") # 2. 通过NAME定位 # driver.find_element(By.NAME, "wd") # 3. 通过CLASS_NAME定位 # driver.find_element(By.CLASS_NAME, "s_ipt") # 4. 通过TAG_NAME定位(找特定类型的标签) #search_box = driver.find_element(By.TAG_NAME, "input") # 5. 通过链接文本定位(精确匹配) # driver.find_element(By.LINK_TEXT, "新闻") # 6. 通过部分链接文本定位(模糊匹配) # driver.find_element(By.PARTIAL_LINK_TEXT, "新") # 7. 通过CSS选择器定位(最灵活) # driver.find_element(By.CSS_SELECTOR, "#kw") # 8. 通过XPath定位(功能最强) # driver.find_element(By.XPATH, "//input[@id='kw']")

2、find_element vs find_elements

find_element 用于定位并返回第一个匹配到的单个元素,若未找到则抛出异常;而 find_elements 则返回所有匹配元素的列表,未找到时返回空列表。例如,在获取百度首页所有链接时,可使用 find_elements 配合 By.TAG_NAME 定位所有 <a> 标签,进而统计链接总数并遍历输出前10个非空文本的链接内容。

from selenium import webdriver from selenium.webdriver.edge.options import Options from selenium.webdriver.common.by import By edge_options = Options() edge_options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" driver = webdriver.Edge(options=edge_options) driver.get('https://www.baidu.com') # 获取百度首页的所有链接 all_links = driver.find_elements(By.TAG_NAME, "a") print(f"首页共有 {len(all_links)} 个链接") for i, link in enumerate(all_links[:10]): # 只显示前10个 text = link.text if text: # 过滤空文本 print(f"{i+1}. {text}")

通过笨重的学习我们就已经掌握了Selenium爬虫的基础知识:Selenium的基本原理和工作方式、如何配置开发环境、八大元素定位方法、与网页的各种交互操作。但记住,爬虫技术就像学游泳——光看教程是不够的,必须亲自实践。从简单的百度搜索开始,慢慢尝试更复杂的网站。

http://www.jsqmd.com/news/107025/

相关文章:

  • NES.css深度解析:打造极致字体预加载与显示优化实战指南
  • 5个OpenWrt界面主题深度评测:从入门到精通的完整选择指南
  • 最近网上爆火的Flowith AI是啥?能否成为下一代AI Agent产品?
  • CVAT用户权限配置完整教程:从基础到高级的团队协作管理终极指南
  • PostgreSQL pgvector扩展Windows安装终极指南
  • SIEMENS软件 6FC5851-1XG41-6YA8技术文章
  • 一文搞懂ERP、MES的区别与联系
  • Magenta Studio:人工智能音乐创作的终极解决方案
  • 3D打印速度优化终极指南:层高线宽最佳配比黄金法则
  • ZorinOS火爆100万下载量的背后,普通人迁移到Linux发行版的障碍在哪?
  • 如何快速解决ComfyUI安全限制:终极配置指南
  • 20、Linux文本文件处理全攻略
  • RuoYi-Vue3企业级快速开发框架:从技术选型到业务落地的完整指南
  • Streamlit + LangChain 1.0 简单实现智能问答前后端
  • EasyGBS换IP后验证失败?原来客户早给白名单设了“本地锁”
  • PRQL现代化查询语言终极指南:从SQL复杂性到数据查询新体验
  • 2025最新毛肚品牌推荐首选周炜毛肚——服务重庆、成都、四川三省,36年匠心传承,毛肚领军品牌实力之选 - 全局中转站
  • EasyGBS赋能电子警察系统让交通执法更智能、更高效
  • 21、Linux文本处理与文件压缩全攻略
  • 2025 最新毛肚品牌 TOP5 评测!深度覆盖重庆、成都、四川等地区,优质毛肚批发商/公司权威榜单公布 - 全局中转站
  • AI大模型:未来就业的双刃剑?揭秘其对普通人工作的影响!
  • 大规模并发请求下EmotiVoice性能压测结果
  • 5分钟掌握gsplat.js:浏览器端3D渲染新利器
  • 模块化单体架构下的DDD测试革命:从混乱到秩序的实践之路
  • 技术栈更新记录
  • 适合新手的电脑版AI编曲软件快速根据哼唱清唱主旋律作伴奏
  • SystemInformer多语言切换终极指南:告别英文恐惧症,轻松驾驭系统监控神器
  • 开源游戏宝典:awesome-open-source-games项目完全指南
  • C#性能优化黑科技:这5个隐藏技巧让你的代码提速300%!
  • gradio-tunneling如何将无公网端口的内部服务代理到公网(2025-12-17亲测有效)