一、网络请求库
-
requests
- 用途:简单高效的 HTTP 客户端库,适合大多数静态页面请求。
- 特点:同步请求、API 简洁、支持会话保持(Session)。
- 示例:
import requests response = requests.get("https://example.com", timeout=5)
-
httpx
- 用途:
requests
的增强版,支持 HTTP/2 和异步请求。 - 特点:兼容
requests
API、异步支持、性能更高。 - 示例:
async with httpx.AsyncClient() as client:response = await client.get("https://example.com")
- 用途:
-
aiohttp
- 用途:基于 asyncio 的异步 HTTP 客户端/服务端库。
- 特点:高并发、适合大规模爬取。
- 示例:
import aiohttp async def fetch():async with aiohttp.ClientSession() as session:async with session.get(url) as response:return await response.text()
二、HTML/XML 解析库
-
BeautifulSoup
- 用途:解析 HTML/XML,支持多种解析器(如
lxml
、html.parser
)。 - 特点:语法简单、适合小规模数据。
- 示例:
from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "lxml") title = soup.find("h1").text
- 用途:解析 HTML/XML,支持多种解析器(如
-
lxml
- 用途:高性能 XML/HTML 解析库,支持 XPath。
- 特点:速度快、内存效率高。
- 示例:
from lxml import etree tree = etree.HTML(html_content) items = tree.xpath("//div[@class='item']/text()")
-
pyquery
- 用途:类似 jQuery 的语法操作 HTML。
- 特点:语法简洁、适合熟悉 jQuery 的用户。
- 示例:
from pyquery import PyQuery as pq doc = pq(html_content) links = doc("a").items()
三、动态页面渲染库
-
Selenium
- 用途:控制浏览器(Chrome、Firefox 等)模拟用户操作。
- 特点:支持 JavaScript 渲染、可处理动态内容。
- 依赖:需安装浏览器驱动(如
chromedriver
)。 - 示例:
from selenium import webdriver driver = webdriver.Chrome() driver.get("https://example.com") element = driver.find_element_by_css_selector("button")
-
Playwright
- 用途:新一代浏览器自动化库,支持多浏览器(Chromium、WebKit、Firefox)。
- 特点:性能优于 Selenium、支持异步、自动等待元素。
- 示例:
from playwright.sync_api import sync_playwright with sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto("https://example.com")content = page.content()
四、爬虫框架
-
Scrapy
- 用途:全功能爬虫框架,适合大规模数据采集。
- 特点:内置异步、中间件、管道(Pipeline)、自动重试等机制。
- 核心组件:
- Spiders(定义爬取逻辑)
- Items(结构化数据)
- Item Pipelines(数据清洗、存储)
- Downloader Middlewares(处理请求/响应)
- 示例:
# 创建项目 scrapy startproject myproject
-
Scrapy-Redis
- 用途:基于 Redis 的分布式爬虫扩展,配合 Scrapy 使用。
- 特点:支持分布式、断点续爬、去重。
五、反反爬工具库
-
fake-useragent
- 用途:生成随机 User-Agent 头。
- 示例:
from fake_useragent import UserAgent ua = UserAgent() headers = {"User-Agent": ua.random}
-
proxy-pool
- 用途:管理代理 IP 池,自动切换 IP 避免封禁。
- 实现方式:需自行搭建或使用付费代理服务(如快代理、芝麻代理)。
-
rotating-proxies
- 用途:自动切换代理,与 Scrapy 或
requests
结合使用。
- 用途:自动切换代理,与 Scrapy 或
六、数据存储库
-
pandas
- 用途:将爬取的数据保存为 CSV、Excel 等格式。
- 示例:
import pandas as pd df = pd.DataFrame(data_list) df.to_csv("data.csv", index=False)
-
pymongo
- 用途:存储数据到 MongoDB 数据库。
- 示例:
from pymongo import MongoClient client = MongoClient("mongodb://localhost:27017/") db = client["mydatabase"] db["mycollection"].insert_one({"data": "value"})
-
sqlalchemy
- 用途:操作 SQL 数据库(如 MySQL、PostgreSQL)。
- 示例:
from sqlalchemy import create_engine engine = create_engine("mysql+pymysql://user:pass@localhost/mydb") df.to_sql("table_name", engine, if_exists="append")
七、其他实用库
-
parsel
- 用途:Scrapy 内置的解析库,支持 XPath 和 CSS 选择器。
-
tldextract
- 用途:解析 URL 的域名、子域名、后缀等。
-
redis
- 用途:实现分布式爬虫时的任务队列和去重。
八、选择建议
- 简单小规模爬取:
requests
+BeautifulSoup
/lxml
- 动态页面:
Selenium
/Playwright
- 大规模爬虫:
Scrapy
- 高并发需求:
aiohttp
/httpx
(异步) - 反爬严格场景:代理池 + 随机 User-Agent + 请求频率控制