先说一句 “面向ChatGPT编程牛逼!!!”

Selenium 是一个用于自动化 Web 浏览器的工具,广泛用于 Web 爬虫和 Web 应用测试。以下是一个详细的 Selenium 中文教程,帮助你快速上手并使用它来进行网页爬虫。

准备工作

  1. 安装 Python
    确保你的系统上已经安装了 Python,可以通过以下命令检查:

    python --version

    如果没有安装,可以从 Python 官网 下载并安装。

  2. 安装 Selenium
    使用 pip 安装 Selenium:

    pip install selenium
  3. 下载 WebDriver
    Selenium 需要使用 WebDriver 来控制浏览器。根据你使用的浏览器下载相应的 WebDriver:

    下载后,将 WebDriver 可执行文件添加到系统的 PATH 中。

详细教程

1. 初始化 WebDriver

首先,初始化 WebDriver 并启动浏览器。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
# 定义Chrome浏览器驱动程序的路径
# 这里使用了Windows系统的路径格式
chrome_drive_path = r"C:\\Program Files\\Google\\Chromedriver\\chromedriver.exe"
# 创建Chrome浏览器的选项对象
# 设置为非无头模式,这意味着浏览器会以图形界面显示出来
# 无头模式(headless)适用于不需要显示浏览器界面的情况
options = Options()
options.headless = False
# 创建一个Service对象,用于指定Chrome驱动程序的路径
# 这样可以更灵活地管理驱动程序的启动和停止
service = Service(chrome_drive_path)
# 创建一个Chrome浏览器实例
# 将前面创建的Service对象和Options对象传递给Chrome浏览器
# 这样浏览器会按照指定的路径和选项启动
driver = webdriver.Chrome(service=service, options=options)

2. 打开网页

使用 get 方法打开指定的网页。

driver.get("https://www.zhipin.com/web/geek/job?city=101180100&industry=100020,100028&position=110101,110105,110110")

3. 查找元素

可以使用多种方法查找页面元素,如 find_elementfind_elements。常见的查找方式有:

  • 按 ID:driver.find_element(By.ID, "element_id")
  • 按名称:driver.find_element(By.NAME, "element_name")
  • 按 XPath:driver.find_element(By.XPATH, "element_xpath")
  • 按 CSS 选择器:driver.find_element(By.CSS_SELECTOR, "element_css")

例如:

search_box = driver.find_element(By.CLASS_NAME, "input")

4. 交互操作

与页面元素交互,如输入文本和点击按钮。

search_box.send_keys("产品经理")
search_box.send_keys(Keys.RETURN)

5. 获取页面信息

可以获取元素的属性、文本等信息。

jobs = driver.find_elements(By.CLASS_NAME, "job-name")
for j in job:
print(j.text)

6. 等待页面加载

在抓取动态加载内容时,可能需要等待页面加载。可以使用显式等待和隐式等待。

  • 隐式等待:设置一个全局等待时间。

    driver.implicitly_wait(10)
  • 显式等待:等待特定条件满足。

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC

    wait = WebDriverWait(driver, 10)
    element = wait.until(EC.presence_of_element_located((By.ID, "element_id")))

7. 关闭浏览器

操作完成后,关闭浏览器。

driver.quit()

完整示例代码

以下是一个完整的示例代码,将上述步骤结合在一起。

# !/usr/bin/python3
# encoding=utf-8

# 导入库
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import StaleElementReferenceException

# 定义Chrome浏览器驱动程序的路径
# 这里使用了Windows系统的路径格式
chrome_drive_path = r"C:\\Program Files\\Google\\Chromedriver\\chromedriver.exe"
# 创建Chrome浏览器的选项对象
# 设置为非无头模式,这意味着浏览器会以图形界面显示出来
# 无头模式(headless)适用于不需要显示浏览器界面的情况
options = Options()
options.headless = False
# 创建一个Service对象,用于指定Chrome驱动程序的路径
# 这样可以更灵活地管理驱动程序的启动和停止
service = Service(chrome_drive_path)
# 创建一个Chrome浏览器实例
# 将前面创建的Service对象和Options对象传递给Chrome浏览器
# 这样浏览器会按照指定的路径和选项启动
driver = webdriver.Chrome(service=service, options=options)

# 访问页面
driver.get("https://www.zhipin.com/web/geek/job?city=101180100&industry=100020,100028&position=110101,110105,110110")

# 在搜索框中输入关键字并提交
search_box = driver.find_element(By.CLASS_NAME, "input")
search_box.send_keys("产品经理")
search_box.send_keys(Keys.RETURN)

# 等待搜索结果加载
wait = WebDriverWait(driver, 10)

# 获取并打印搜索结果的标题

# 职位名称
while True:
try:
job_names = wait.until(EC.presence_of_all_elements_located((By.CLASS_NAME, "job-name")))
for i in job_names:
job_name_text = i.text.strip()
if job_name_text:
print(job_name_text)
break
except StaleElementReferenceException:
print("捕获 StaleElementReferenceException。重试...")

# 关闭浏览器
driver.quit()

通过以上步骤,你已经掌握了使用 Selenium 进行基本网页爬虫操作的技能。可以根据实际需求进行扩展和修改。