admin 管理员组

文章数量: 887629

使用 Python 进行数据爬虫通常包括以下步骤,下面的代码以一个爬取简单网页信息(比如书籍标题和价格)的例子来说明整个步骤,如果还是看不明白那一定是没有看🎈基石篇🎈好吧。别废话开始吧🔎


爬取一个在线书店的书籍标题和价格之Requests

步骤 1:准备环境

安装必要的 Python 库,例如 requestsBeautifulSoup

pip install requests beautifulsoup4
步骤 2:分析目标网站

通过浏览器访问目标网站,右键检查网页源代码,找到目标数据的 HTML 结构。例如:

<div class="book">
    <h2 class="title">Python Programming</h2>
    <p class="price">$29.99</p>
</div>
步骤 3:发送 HTTP 请求并获取网页内容

使用 requests 库获取网页内容。

import requests

url = "https://example/books"  # 目标网站
response = requests.get(url)

# 检查响应状态
if response.status_code == 200:
    html_content = response.text  # 获取网页内容
else:
    print(f"请求失败,状态码:{response.status_code}")
步骤 4:解析网页内容

使用 BeautifulSoup 库解析 HTML 数据。

from bs4 import BeautifulSoup

# 解析 HTML
soup = BeautifulSoup(html_content, 'html.parser')

# 找到包含书籍信息的元素
books = soup.find_all('div', class_='book')  # 根据 class 名找到所有书籍条目
步骤 5:提取所需数据

从 HTML 结构中提取书籍标题和价格。

for book in books:
    title = book.find('h2', class_='title').text  # 提取标题
    price = book.find('p', class_='price').text  # 提取价格
    print(f"书名: {title}, 价格: {price}")
步骤 6:保存数据

将数据保存为 CSV 文件。

import csv

with open('books.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['书名', '价格'])  # 写入表头
    for book in books:
        title = book.find('h2', class_='title').text
        price = book.find('p', class_='price').text
        writer.writerow([title, price])

总结

  1. 环境准备:安装爬虫库如 requestsBeautifulSoup
  2. 目标分析:检查目标网站的 HTML 结构,确定数据位置。
  3. 发送请求:通过 HTTP 请求获取网页内容。
  4. 解析内容:使用 HTML 解析工具提取所需数据。
  5. 存储数据:将数据保存为本地文件(如 CSV 或数据库)。

使用 Selenium 进行爬虫操作适用于处理动态加载内容或需要模拟用户操作的网站。下面是一个完整的示例,包括基本步骤和代码。


使用 Selenium 爬取动态加载的书籍信息

步骤 1:安装 Selenium 和浏览器驱动
  • 安装 Selenium 库:
    pip install selenium
    
  • 下载与浏览器匹配的驱动程序(如 ChromeDriver 或 GeckoDriver),并将其路径添加到系统环境变量中
    • 安装和配置 Selenium 的 Chrome 驱动需要以下步骤:
      • 一、检查 Chrome 浏览器版本

          1. 打开 Chrome 浏览器。
          1. 点击右上角的 三个点 > 帮助 > 关于 Google Chrome
          1. 记下浏览器的版本号,例如:119.0.1234.56
      • 二、下载与 Chrome 版本匹配的 ChromeDriver

          1. 打开 ChromeDriver 官方下载页面:
            https://chromedriver.chromium/downloads
          1. 根据你的 Chrome 浏览器版本号,下载对应版本的 ChromeDriver。
          • 如果你的浏览器版本是 119.x,就下载 ChromeDriver 119.x
          1. 根据你的操作系统选择适合的版本(Windows、Mac、Linux)。
      • 三、解压并设置路径

          1. 解压下载的 ChromeDriver 压缩文件。
          1. 将解压后的 chromedriver 文件放置在一个路径明确的地方,例如:C:\WebDriver\
      • 四、加 ChromeDriver 到系统路径(可选)

        • Windows

            1. 打开 控制面板 > 系统 > 高级系统设置 > 环境变量
            1. 找到 系统变量 中的 Path,点击 编辑
            1. 新增一行,将 ChromeDriver 的路径添加进去,例如:C:\WebDriver\
            1. 点击 确定
        • Mac/Linux
          在终端中运行以下命令,将 ChromeDriver 添加到系统路径:

export PATH=$PATH:/path/to/chromedriver
步骤 2:导入库并初始化浏览器

使用 Selenium 初始化一个浏览器对象。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time  # 用于处理加载等待

# 初始化浏览器
driver = webdriver.Chrome()  # 确保已安装 ChromeDriver

# 访问目标网站
url = "https://example/books"
driver.get(url)

步骤 3:找到目标元素并提取数据

通过定位页面上的动态内容提取书籍信息。

# 等待页面加载完成
time.sleep(3)  # 简单等待(也可以使用显式等待)

# 定位包含书籍的元素
books = driver.find_elements(By.CLASS_NAME, 'book')  # 根据 class 名获取所有书籍条目

# 提取每本书的标题和价格
for book in books:
    title = book.find_element(By.CLASS_NAME, 'title').text  # 找到标题元素
    price = book.find_element(By.CLASS_NAME, 'price').text  # 找到价格元素
    print(f"书名: {title}, 价格: {price}")

步骤 4:处理翻页或动态加载

如果页面有翻页功能,可以模拟点击“下一页”按钮;如果数据是动态加载的,可以滚动页面加载更多内容。

示例 1:模拟翻页

while True:
    try:
        next_button = driver.find_element(By.LINK_TEXT, '下一页')  # 找到“下一页”按钮
        next_button.click()  # 点击按钮
        time.sleep(3)  # 等待新页面加载
    except:
        print("没有更多页面")
        break

示例 2:模拟滚动

# 模拟向下滚动页面
for _ in range(5):  # 滚动 5 次
    driver.execute_script("window.scrollBy(0, 1000);")  # 每次滚动 1000 像素
    time.sleep(2)  # 等待加载

步骤 5:保存数据

提取完数据后,将其保存为 CSV 文件。

import csv

with open('books_selenium.csv', mode='w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(['书名', '价格'])  # 写入表头
    for book in books:
        title = book.find_element(By.CLASS_NAME, 'title').text
        price = book.find_element(By.CLASS_NAME, 'price').text
        writer.writerow([title, price])

步骤 6:关闭浏览器

爬取完成后关闭浏览器以释放资源。

driver.quit()

注意事项

  1. 显式等待:避免使用 time.sleep,可以用 Selenium 提供的 WebDriverWait 等显式等待工具。

    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.CLASS_NAME, "book"))
    )
    
  2. 反爬虫对策

    • 模拟人类操作(如随机等待、随机滚动)。
    • 使用代理 IP 和设置浏览器 User-Agent。

本文标签: 爬虫