Python 基础入门 Day15

欢迎来到 Python 基础入门 Day15!昨天我们学习了如何使用 requestsBeautifulSoup 实现 Web 爬虫,并简单提到了处理动态网页的挑战。今天,我们将深入了解如何使用 Selenium,一种可以模拟浏览器操作的工具,来应对动态网页的爬取。


目录

  1. 什么是 Selenium?
  2. 安装与环境配置
  3. Selenium 的基本操作
  4. 动态网页的处理
  5. 示例:爬取包含 JavaScript 动态加载的网页
  6. 小结与练习

一、什么是 Selenium?

Selenium 是一个强大的 Web 自动化工具,最初是为浏览器自动化测试而开发的。它的功能包括但不限于:

  • 模拟用户操作(点击、输入、滚动等)。
  • 等待动态内容加载。
  • 操作 JavaScript 渲染的网页。

与传统爬虫工具不同,Selenium 可以直接启动浏览器(如 Chrome、Firefox),通过模拟人类行为获取动态加载的内容。


二、安装与环境配置

2.1 安装 Selenium 库

使用 pip 安装 Selenium:

pip install selenium

2.2 安装浏览器驱动

Selenium 需要与浏览器驱动配合使用。以下是 Chrome 浏览器的设置方法:

  1. 下载 ChromeDriver(确保版本与 Chrome 浏览器匹配)。
  2. 解压后,将驱动程序的路径添加到环境变量中,或者直接指定路径。

2.3 验证安装

测试代码:

from selenium import webdriver driver = webdriver.Chrome() # 启动 Chrome 浏览器 driver.get("https://www.python.org") # 打开 Python 官网 print(driver.title) # 输出页面标题 driver.quit() # 关闭浏览器


三、Selenium 的基本操作

3.1 打开网页

driver = webdriver.Chrome() driver.get("https://example.com")

3.2 定位元素

Selenium 提供多种方式来定位网页中的元素:

from selenium.webdriver.common.by import By # 根据 ID 定位 element = driver.find_element(By.ID, "element_id") # 根据类名定位 element = driver.find_element(By.CLASS_NAME, "element_class") # 根据 XPath 定位 element = driver.find_element(By.XPATH, "//div[@class='example']")

3.3 模拟用户操作

# 输入文本 element.send_keys("Python") # 点击按钮 button = driver.find_element(By.ID, "submit") button.click()

3.4 等待页面加载

使用显式等待确保目标元素加载完成:

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "element_id")) )

3.5 关闭浏览器

driver.quit()


四、动态网页的处理

4.1 滚动页面加载更多内容

对于需要滚动加载的页面(如微博、商品列表),可以使用 JavaScript 指令模拟滚动操作:

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

4.2 捕获动态生成的内容

动态网页通常由 JavaScript 渲染,内容可能需要等待加载。通过显式等待可以确保数据完整:

from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC element = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.CSS_SELECTOR, ".dynamic-content")) ) print(element.text)


五、示例:爬取动态加载的网页

以下示例展示了如何使用 Selenium 爬取动态加载的新闻标题:

5.1 代码实现

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 启动浏览器 driver = webdriver.Chrome() driver.get("https://news.ycombinator.com/") # 等待页面加载 WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "storylink")) ) # 提取新闻标题 titles = driver.find_elements(By.CLASS_NAME, "storylink") for title in titles: print(title.text) # 关闭浏览器 driver.quit()

5.2 输出结果

Show HN: New AI tool released Open Source Python Projects How to Learn Python Effectively ...


六、小结与练习

今天我们学习了如何使用 Selenium 处理动态网页,包括基本操作和复杂场景的处理。Selenium 是应对 JavaScript 渲染内容的强大工具,但由于需要启动浏览器,速度较慢,适合处理小规模数据爬取。

今日练习题:

  1. 使用 Selenium 模拟登录某个简单的网站(如博客、论坛)。
  2. 爬取电商网站首页的动态商品列表信息。
  3. 尝试爬取一个滚动加载页面的所有内容。

下一节预告:在 Day16 中,我们将探索如何将 Web 爬虫与 数据库 结合,完成数据的存储与管理。敬请期待!


希望你今天学得开心!如果有任何问题或需要进一步的解释,欢迎随时留言 😊。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注