Scrapy 基础介绍
Scrapy 基础介绍
Scrapy 是一个用于爬取网站数据并提取结构化信息的 Python 框架。它基于异步网络库 Twisted,支持高效的数据抓取、处理与存储。以下从安装、项目创建、核心组件到实际示例展开说明。
安装 Scrapy
通过 pip 安装 Scrapy:
pip install scrapy
验证安装是否成功:
scrapy version
创建 Scrapy 项目
使用命令行工具生成项目结构:
scrapy startproject project_name
生成的目录结构如下:
project_name/scrapy.cfgproject_name/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py
核心组件与配置
1. Items (items.py)
定义爬取数据的字段模板:
import scrapyclass ProductItem(scrapy.Item):name = scrapy.Field()price = scrapy.Field()
2. Spiders (spiders/)
编写爬虫逻辑,继承 scrapy.Spider
:
class ExampleSpider(scrapy.Spider):name = "example"start_urls = ["https://example.com"]def parse(self, response):item = ProductItem()item["name"] = response.css("h1::text").get()item["price"] = response.css(".price::text").get()yield item
3. Pipelines (pipelines.py)
处理爬取的数据(如存储到数据库):
class JsonWriterPipeline:def process_item(self, item, spider):with open("items.json", "a") as f:f.write(json.dumps(dict(item)) + "\n")return item
在 settings.py
中启用 Pipeline:
ITEM_PIPELINES = {"project_name.pipelines.JsonWriterPipeline": 300,
}
4. Middlewares (middlewares.py)
自定义请求/响应处理逻辑(如 User-Agent 轮换)。
运行爬虫
通过命令行启动爬虫:
scrapy crawl example -o output.json
参数说明:
-o
:输出结果到文件(支持 JSON、CSV 等格式)。-a
:传递参数(如-a category=electronics
)。
进阶功能
1. 动态请求(Follow Links)
在 parse
方法中生成新请求:
yield scrapy.Request(url="https://example.com/page2", callback=self.parse_page2)
2. 使用 Item Loaders
标准化数据处理流程:
from scrapy.loader import ItemLoaderloader = ItemLoader(item=ProductItem(), response=response)
loader.add_css("name", "h1::text")
loader.add_value("price", 100)
yield loader.load_item()
3. 避免被屏蔽
- 在
settings.py
中配置DOWNLOAD_DELAY
和USER_AGENT
。 - 使用
scrapy-fake-useragent
库动态切换 User-Agent。
调试与日志
- 启用 Shell 快速测试选择器:
scrapy shell "https://example.com"
- 查看日志:
scrapy crawl example --loglevel=INFO
通过结合上述模块与功能,Scrapy 可高效完成从简单到复杂的爬虫任务。