工具選型
- Scrapy:專業異步爬蟲框架,支持選擇器、中間件、管道、分佈式擴展。
- Requests + BeautifulSoup/lxml:簡單頁面、一次性腳本。
- Selenium/Playwright:需渲染 JS、模擬登錄的複雜站點。
Scrapy 最小項目
# 安裝
pip install scrapy
# 創建項目
scrapy startproject bookspider
cd bookspider
# 生成 Spider
scrapy genspider books example.com
核心代碼
# bookspider/spiders/books.py
import scrapy
import re
class BooksSpider(scrapy.Spider):
name = 'books'
start_urls = ['https://example.com/category/programming']
def parse(self, response):
for book in response.css('div.book-item'):
yield {
'title': book.css('h3 a::attr(title)').get(),
'price': book.css('.price::text').re_first(r'[\d.]+'),
'rating': book.css('.star-rating::attr(class)').re_first(r'(\d)'),
'url': response.urljoin(book.css('h3 a::attr(href)').get()),
}
# 翻頁
next_page = response.css('li.next a::attr(href)').get()
if next_page:
yield response.follow(next_page, self.parse)
運行與導出
scrapy crawl books -o books.json # JSON
scrapy crawl books -o books.csv # CSV
scrapy crawl books -o books.jsonl # JSON Lines
進階建議
- 設置
DOWNLOAD_DELAY、CONCURRENT_REQUESTS 禮貌爬取。
- 使用
Item Pipeline 寫入 MySQL/MongoDB/Elasticsearch。
- 反爬應對:隨機 User-Agent、代理 IP 池、Cookie 池、驗證碼識別服務。
- 部署:
scrapyd + scrapyd-client 或 Docker + Kubernetes。