admin 管理员组文章数量: 887629
使用 Python 进行数据爬虫通常包括以下步骤,下面的代码以一个爬取简单网页信息(比如书籍标题和价格)的例子来说明整个步骤,如果还是看不明白那一定是没有看🎈基石篇🎈好吧。别废话开始吧🔎
爬取一个在线书店的书籍标题和价格之Requests
步骤 1:准备环境
安装必要的 Python 库,例如 requests
和 BeautifulSoup
。
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])
总结
- 环境准备:安装爬虫库如
requests
和BeautifulSoup
。 - 目标分析:检查目标网站的 HTML 结构,确定数据位置。
- 发送请求:通过 HTTP 请求获取网页内容。
- 解析内容:使用 HTML 解析工具提取所需数据。
- 存储数据:将数据保存为本地文件(如 CSV 或数据库)。
使用 Selenium 进行爬虫操作适用于处理动态加载内容或需要模拟用户操作的网站。下面是一个完整的示例,包括基本步骤和代码。
使用 Selenium 爬取动态加载的书籍信息
步骤 1:安装 Selenium 和浏览器驱动
- 安装 Selenium 库:
pip install selenium
- 下载与浏览器匹配的驱动程序(如 ChromeDriver 或 GeckoDriver),并将其路径添加到系统环境变量中
- 安装和配置 Selenium 的 Chrome 驱动需要以下步骤:
-
一、检查 Chrome 浏览器版本
-
- 打开 Chrome 浏览器。
-
- 点击右上角的 三个点 > 帮助 > 关于 Google Chrome。
-
- 记下浏览器的版本号,例如:
119.0.1234.56
。
- 记下浏览器的版本号,例如:
-
-
二、下载与 Chrome 版本匹配的 ChromeDriver
-
- 打开 ChromeDriver 官方下载页面:
https://chromedriver.chromium/downloads
- 打开 ChromeDriver 官方下载页面:
-
- 根据你的 Chrome 浏览器版本号,下载对应版本的 ChromeDriver。
- 如果你的浏览器版本是
119.x
,就下载ChromeDriver 119.x
。
-
- 根据你的操作系统选择适合的版本(Windows、Mac、Linux)。
-
-
三、解压并设置路径
-
- 解压下载的 ChromeDriver 压缩文件。
-
- 将解压后的
chromedriver
文件放置在一个路径明确的地方,例如:C:\WebDriver\
。
- 将解压后的
-
-
四、加 ChromeDriver 到系统路径(可选)
-
Windows:
-
- 打开 控制面板 > 系统 > 高级系统设置 > 环境变量。
-
- 找到 系统变量 中的
Path
,点击 编辑。
- 找到 系统变量 中的
-
- 新增一行,将 ChromeDriver 的路径添加进去,例如:
C:\WebDriver\
。
- 新增一行,将 ChromeDriver 的路径添加进去,例如:
-
- 点击 确定。
-
-
Mac/Linux:
在终端中运行以下命令,将 ChromeDriver 添加到系统路径:
-
-
- 安装和配置 Selenium 的 Chrome 驱动需要以下步骤:
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()
注意事项
-
显式等待:避免使用
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")) )
-
反爬虫对策:
- 模拟人类操作(如随机等待、随机滚动)。
- 使用代理 IP 和设置浏览器 User-Agent。
本文标签: 爬虫
版权声明:本文标题:现在还不会爬虫? 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1735051489h1695507.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论