第2课_开发Scrapy框架爬虫
热度🔥:16 免费课程
授课语音
开发 Scrapy 框架爬虫
Scrapy 是一个强大的 Python 爬虫框架,适用于大规模数据抓取和处理。开发 Scrapy 爬虫的基本流程通常包括:定义 Item、编写 Spider、配置 Pipelines 和 Middleware、以及运行爬虫等步骤。下面是详细的开发步骤。
1. 创建 Scrapy 项目
首先,确保你已经按照前面的步骤安装并配置了 Scrapy。
1.1 创建一个新的 Scrapy 项目
在命令行中,进入你想创建项目的目录,运行以下命令来创建一个 Scrapy 项目:
scrapy startproject myproject
这会在当前目录下创建一个名为 myproject
的 Scrapy 项目,目录结构如下:
myproject/
scrapy.cfg
myproject/
__init__.py
items.py
middlewares.py
pipelines.py
settings.py
spiders/
__init__.py
2. 定义 Item
Item 是 Scrapy 中的数据结构,用来定义我们要抓取的内容。
2.1 在 items.py
中定义 Item
打开 myproject/items.py
,定义你要抓取的数据字段。例如,如果你要抓取博客文章的标题和链接,可以定义如下:
import scrapy
class MyprojectItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
3. 创建 Spider
Spider 是用来爬取网站并提取数据的组件。Scrapy 提供了多种类型的 Spider(例如 CrawlSpider
和 XMLFeedSpider
),这里以简单的 Spider 为例。
3.1 编写一个 Spider
在 spiders
目录下,创建一个新的 Python 文件(例如 quotes_spider.py
)。这个 Spider 将从网站上抓取数据。以抓取书籍信息为例,Spider 内容如下:
import scrapy
from myproject.items import MyprojectItem
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
# 提取每个quote的数据
for quote in response.css('div.quote'):
item = MyprojectItem()
item['title'] = quote.css('span.text::text').get() # 获取引用文本
item['link'] = quote.css('span small::text').get() # 获取作者信息
yield item
# 翻页功能:获取下一页链接并继续爬取
next_page = response.css('li.next a::attr(href)').get()
if next_page:
yield response.follow(next_page, self.parse)
上述代码的解释:
start_urls
:指定初始抓取的 URL。parse
:处理响应并提取数据。在这里,我们提取每个 quote 的文本和作者。next_page
:实现翻页功能,抓取网站的下一页。
4. 配置 Pipelines 和 Middlewares(可选)
Scrapy 的 Pipelines 和 Middlewares 用于处理抓取到的数据、处理请求和响应等。
4.1 配置 Pipeline
在 pipelines.py
中,你可以定义一个 Pipeline 用于处理抓取到的数据。例如,存储到数据库、文件等。
class MyprojectPipeline:
def process_item(self, item, spider):
# 在这里你可以处理抓取的数据
# 例如将数据保存到文件或数据库
with open('quotes.json', 'a') as f:
f.write(str(item) + '\n')
return item
4.2 启用 Pipeline
在 settings.py
文件中启用 Pipeline:
ITEM_PIPELINES = {
'myproject.pipelines.MyprojectPipeline': 1,
}
5. 配置 Settings(可选)
Scrapy 提供了许多设置选项来定制爬虫的行为。例如,你可以配置 User-Agent、请求延迟、并发请求数等。
打开 settings.py
,配置一些常见的设置:
# 配置请求延迟,避免过于频繁的请求
DOWNLOAD_DELAY = 2
# 配置 User-Agent,模拟浏览器访问
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
6. 运行爬虫
在项目根目录下,运行爬虫抓取数据:
scrapy crawl quotes
Scrapy 会开始从 start_urls
指定的地址抓取数据,并使用 parse
方法提取数据。你可以看到终端输出抓取到的内容。
7. 存储数据
Scrapy 支持将抓取到的数据导出为多种格式,如 JSON、CSV 和 XML。运行爬虫时,可以通过以下命令将数据导出为 JSON 文件:
scrapy crawl quotes -o quotes.json
这会将抓取的数据存储到 quotes.json
文件中。
8. 高级功能(可选)
8.1 使用选择器
Scrapy 的选择器提供了强大的 XPath 和 CSS 选择功能,帮助你更精确地提取网页内容。例如:
# 使用 CSS 选择器
quote_text = response.css('span.text::text').get()
# 使用 XPath 选择器
quote_text = response.xpath('//span[@class="text"]/text()').get()
8.2 模拟登录
如果网站需要登录才能访问某些内容,可以使用 Scrapy 的 FormRequest
来模拟登录。例如:
def start_requests(self):
login_url = 'http://example.com/login'
return [scrapy.FormRequest(login_url, formdata={'username': 'user', 'password': 'pass'}, callback=self.after_login)]
def after_login(self, response):
# 登录后执行的操作
pass
8.3 并发控制
Scrapy 默认会并发执行多个请求,这样爬取速度更快。你可以在 settings.py
文件中设置并发请求数:
CONCURRENT_REQUESTS = 16 # 默认并发请求数
9. 小结
通过上面的步骤,你已经学会了如何使用 Scrapy 框架来开发一个基本的爬虫。你可以根据需要扩展爬虫的功能,例如实现登录、处理 Cookies、设置代理、配置请求头等。
Scrapy 的强大之处在于它支持大规模的爬取和高度定制化的功能,适用于数据抓取、爬取数据存储以及自动化数据处理等场景。