在 Python 中,爬虫是获取网页数据的常用工具。以下是六种常见的爬虫方法,涵盖了从简单的静态网页抓取到动态网页处理的多种场景。
1. 使用 requests + BeautifulSoup 抓取静态网页
这是最基础的爬虫方法,适用于静态网页(HTML 内容直接嵌入在网页中)。
本文介绍了 Python 中六种常见的网页数据抓取方法。包括使用 requests 结合 BeautifulSoup 处理静态页面、利用正则表达式提取特定格式数据、通过 Selenium 模拟浏览器操作动态内容、借助 Scrapy 框架构建大规模爬虫项目、使用 PyQuery 解析 HTML 以及直接调用 API 获取结构化数据。文章对比了各方法的适用场景、优缺点,帮助开发者根据实际需求选择高效的数据采集方案。

在 Python 中,爬虫是获取网页数据的常用工具。以下是六种常见的爬虫方法,涵盖了从简单的静态网页抓取到动态网页处理的多种场景。
这是最基础的爬虫方法,适用于静态网页(HTML 内容直接嵌入在网页中)。
import requests
from bs4 import BeautifulSoup
# 发送 HTTP 请求
url = 'https://example.com'
response = requests.get(url)
# 解析 HTML 内容
soup = BeautifulSoup(response.text, 'html.parser')
# 提取数据
title = soup.title.text
print(f'网页标题:{title}')
# 提取所有链接
links = soup.find_all('a')
for link in links:
print(link.get('href'))
如果需要从网页中提取特定格式的数据(如邮箱、电话号码等),可以使用正则表达式。
import requests
import re
# 发送 HTTP 请求
url = 'https://example.com'
response = requests.get(url)
# 使用正则表达式提取邮箱
emails = re.findall(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+', response.text)
print(emails)
对于动态加载的网页(如通过 JavaScript 渲染的内容),可以使用 Selenium 模拟浏览器行为。
from selenium import webdriver
from selenium.webdriver.common.by import By
# 初始化浏览器
driver = webdriver.Chrome()
# 打开网页
url = 'https://example.com'
driver.get(url)
# 获取动态加载的内容
element = driver.find_element(By.CSS_SELECTOR, '.dynamic-content')
print(element.text)
# 关闭浏览器
driver.quit()
Scrapy 是一个强大的爬虫框架,适合构建复杂的爬虫项目。
pip install scrapy
scrapy startproject myproject
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['https://example.com']
def parse(self, response):
title = response.css('title::text').get()
yield {'title': title}
scrapy crawl myspider -o output.json
PyQuery 是一个类似于 jQuery 的库,适合熟悉 jQuery 语法的开发者。
import requests
from pyquery import PyQuery as pq
# 发送 HTTP 请求
url = 'https://example.com'
response = requests.get(url)
# 解析 HTML
doc = pq(response.text)
# 提取数据
title = doc('title').text()
print(f'网页标题:{title}')
# 提取所有链接
links = doc('a')
for link in links.items():
print(link.attr('href'))
许多网站提供 API 接口,直接通过 API 获取数据是最高效的方式。
import requests
# API 地址
url = 'https://api.example.com/data'
# 发送请求
params = {'key': 'your_api_key', 'q': 'search_query'}
response = requests.get(url, params=params)
# 解析 JSON 数据
data = response.json()
print(data)
| 方法 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| requests + BeautifulSoup | 静态网页抓取 | 简单易用 | 无法处理动态内容 |
| requests + 正则表达式 | 提取特定格式数据 | 灵活 | 正则表达式编写复杂 |
| Selenium | 动态网页抓取 | 支持动态内容 | 速度慢,资源消耗大 |
| Scrapy | 大规模数据抓取 | 功能强大,支持分布式 | 学习曲线较陡 |
| PyQuery | 熟悉 jQuery 语法的开发者 | 语法简洁 | 功能相对有限 |
| API | 网站提供 API 接口 | 高效、稳定 | 需要 API 权限 |
根据具体需求选择合适的爬虫方法,可以大大提高开发效率和数据抓取效果。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online