【进阶】使用Scrapy进行大型爬虫项目
发布时间: 2024-06-29 01:42:12 阅读量: 78 订阅数: 131
![【进阶】使用Scrapy进行大型爬虫项目](https://img-blog.csdnimg.cn/1c97ee8ecca14c68b5013ac60e815355.png)
# 2.1 Scrapy项目结构和配置
Scrapy项目是一个包含所有爬虫代码、配置和数据的文件夹。它通常包含以下目录和文件:
```
├── scrapy.cfg # Scrapy配置文件
├── spiders/ # 爬虫模块目录
│ ├── __init__.py # 初始化文件
│ └── example.py # 示例爬虫模块
├── pipelines.py # 数据管道文件
├── settings.py # Scrapy设置文件
├── items.py # 数据项文件
└── middlewares.py # 中间件文件
```
### 2.1.1 项目目录结构
* **spiders/:** 存储爬虫模块的目录。每个爬虫模块都包含一个类,该类定义了爬虫的行为。
* **pipelines.py:** 数据管道文件,用于处理和存储爬取到的数据。
* **settings.py:** Scrapy设置文件,用于配置爬虫的行为,例如用户代理、下载延迟和并发请求数。
* **items.py:** 数据项文件,用于定义爬取数据的结构。
* **middlewares.py:** 中间件文件,用于在爬虫请求和响应处理过程中执行自定义逻辑。
# 2. Scrapy爬虫开发实践
### 2.1 Scrapy项目结构和配置
#### 2.1.1 项目目录结构
Scrapy项目通常采用以下目录结构:
```
scrapy_project/
├── scrapy.cfg
├── settings.py
├── pipelines.py
├── spiders/
│ ├── spider1.py
│ ├── spider2.py
├── items.py
└── middlewares.py
```
- `scrapy.cfg`:Scrapy配置文件,用于配置爬虫的全局设置。
- `settings.py`:项目设置文件,用于配置爬虫的具体参数。
- `pipelines.py`:数据处理管道,用于对爬取到的数据进行清洗、存储等操作。
- `spiders/`:爬虫目录,存放爬虫类文件。
- `items.py`:数据模型文件,用于定义爬取数据的结构。
- `middlewares.py`:中间件目录,存放爬虫中间件文件。
#### 2.1.2 配置文件详解
`settings.py`配置文件中包含了大量的配置选项,用于控制爬虫的各种行为。以下列举部分常用配置项:
| 配置项 | 描述 |
|---|---|
| BOT_NAME | 爬虫名称 |
| SPIDER_MODULES | 爬虫类模块 |
| ITEM_PIPELINES | 数据处理管道 |
| DOWNLOAD_DELAY | 下载延迟 |
| CONCURRENT_REQUESTS | 并发请求数 |
### 2.2 Scrapy爬虫编写
#### 2.2.1 爬虫类编写
爬虫类是Scrapy爬虫的核心,负责爬取网页和提取数据。一个简单的爬虫类如下:
```python
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['example.com']
start_urls = ['http://example.com']
def parse(self, response):
# 提取数据并返回Item对象
item = MyItem()
item['title'] = response.css('title::text').get()
item['content'] = response.css('p::text').getall()
return item
```
- `name`:爬虫名称,必须唯一。
- `allowed_domains`:允许爬取的域名列表。
- `start_urls`:爬虫的初始URL列表。
- `parse`方法:用于解析响应并提取数据。
#### 2.2.2 爬取规则编写
爬取规则用于指定如何从网页中提取数据。Scrapy提供了多种选择器,可以方便地提取不同类型的元素。以下是一些常用的选择器:
| 选择器 | 描述 |
|---|---|
| `css` | 使用CSS选择器提取元素 |
| `xpath` | 使用XPath表达式提取元素 |
| `re` | 使用正则表达式提取元素 |
#### 2.2.3 中间件编写
中间件是Scrapy中的钩子机制,允许用户在爬虫的不同阶段执行自定义代码。Scrapy提供了多种内置中间件,用户也可以编写自己的中间件。
以下是一个简单的中间件示例,用于记录爬虫请求和响应:
```python
from scrapy import signals
from scrapy.http import Request, Response
class LogMiddleware:
@classmethod
def from_crawler(cls, crawler):
# 在爬虫启动时注册中间件
crawler.signals.connect(cls.spider_opened, signal=signals.spider_opened)
crawler.signals.connect(cls.request_received, signal=signals.request_received)
crawler.signals.connect(cls.response_received, signal=signals.response_received)
return cls()
def spider_opened(self, spider)
```
0
0