Scrapy 是什么?
如果您正在寻找最好的数据抓取工具,那么你一定会听说过 Scrapy。Scrapy 是一个开源的高级网络爬虫框架,可用于从网络站点中收集大量数据。
Scrapy是一个基于Python的 web 抓取框架,由 Scrapy 开发团队维护,是当前最为流行的 Python 爬虫框架之一。
Scrapy有强大的功能和资源,可以帮助您在不到几分钟内爬取和提取大量的数据。尽管 Scrapy 非常强大,但学习它并不难。在这篇文章中,我们将分享一些有关如何使用 Scrapy 的信息,并且我们将从头开始构建一个实例。
为什么使用 Scrapy?
Scrapy 可能不是适合所有人的工具,但对于那些希望快速获取大量数据的专业数据采集人员或在线营销人员来说,Scrapy 肯定是一个非常好的选择。以下是一些 Scrapy 的优点。
1. 包罗万象
Scrapy 可以从各种网络站点中抓取各种数据,包括文本、图像和其他多媒体文件。
2. 更快
Scrapy 是基于异步 I/O 模型的高级网络爬虫框架,有较高的效率和速度。如果您需要进行大规模的数据抓取,Scrapy 肯定是一个不错的选择。
3. 易于处理
Scrapy 内置的数据处理和提取机制使数据高效地处理成可供分析使用的结构化数据。这可以帮助您在收集数据后更轻松地进行分析和解释。
4. 团队开发
Scrapy 的设计是团队使用,使得数据采集在整个团队中具有协作性,可以轻松处理数据采集任务。此外,Scrapy 也支持多线程操作,可以更快地进行并行操作。
5. 开源免费
Scrapy 是一个完全免费、开源的项目,这一点比其他数据抓取工具更具竞争力。并且由于以BSD协议许可,因此它适合于各种应用程序的开发工作。
如何安装 Scrapy?
安装 Scrapy 所需要的工具和平台包括 Python,pip 和安装好的 Scrapy 命令行工具。在 Windows,Mac 和 Linux 上安装 Scrapy 非常简单。请按照以下步骤操作。
1. 下载并安装 Python。
2. 下载 lxml 和 pyOpenSSL 这样的库。这些库是Scrapy所需要的。
3. 使用 pip 安装 Scrapy。
在 Windows 上,您可以使用以下命令来安装 Scrapy。
```
$ pip install scrapy
```
在 macOS 上,您可以使用以下命令来安装 Scrapy。
```
$ sudo pip install scrapy
```
如何使用 Scrapy?
现在,您已经成功地安装 Scrapy。现在,请参阅以下示例,了解如何使用 Scrapy 来创建自己的爬虫。
目标项
首先,您需要指定网站 URL。我们将使用 Dmoz 目录作为我们的初始目标站点。该目录是 ODP 的现有副本。
创建 Scrapy 项目和爬虫
在终端中,输入以下命令来创建 Scrapy 项目:
```
$ scrapy startproject ScrapyDmoz
```
此时这样一个文件结构就出来了。
```
ScrapyDmoz/
scrapy.cfg
ScrapyDmoz/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
myprod.py
```
现在,使用以下命令创建爬虫:
```
$ cd ScrapyDmoz
$ scrapy genspider myprod dmoz.org
```
打开 `spiders\myprod.py` 文件 。
我们可以修改一下这个给定示例,让它可以抓取更多商品数据,例如品牌、价格等等。代码如下所示。
```
import scrapy
class ElectricspiderSpider(scrapy.Spider):
name = "myprod"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/",
]
def parse(self, response):
for href in response.css("ul.directory.dir-col > li > a::attr('href')"):
url = response.urljoin(href.extract())
yield scrapy.Request(url, callback=self.parse_category)
def parse_category(self, response):
for sel in response.xpath("//ul[@class='directory-dir']/li"):
title = sel.xpath("a/text()").extract_first()
url = sel.xpath("a/@href").extract_first()
yield scrapy.Request(url, callback=self.parse_category_items)
def parse_category_items(self, response):
for sel in response.xpath("//div[@class='entry']"):
item = {
"title": sel.xpath("a/text()").extract_first(),
"link": sel.xpath("a/@href").extract_first(),
"desc": sel.xpath("text()").extract_first().strip(),
}
yield item
```
在上面的代码中,我们更新了 Scrapy 的一个示例。在这个新示例中,我们首先打开某些目标网页,并迭代这些页面上的数据,这样我们就可以将数据提取出来并将其存储在 CSV 文件中。
存储数据
在完成数据的爬取和处理之后,接下来是如何处理和存储这些数据。在 Scrapy 中,我们是通过 pipeline 对象来处理和存储已经抓取的数据的。
pipeline 还可以用于执行数据清理、数据处理以及将数据导入数据库中。
以下是处理数据的示例。
```
from scrapy import signals, Spider
from scrapy.loader import ItemLoader
from scrapy.utils.project import get_project_settings
import logging
class ElectricspiderSpider(Spider):
name = "myprod"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/",
]
settings = get_project_settings()
@classmethod
def from_crawler(cls, crawler, *args, **kwargs):
spider = super(ElectricspiderSpider, cls).from_crawler(crawler, *args, **kwargs)
spider.logger.setLevel(logging.DEBUG)
return spider
def parse(self, response):
for href in response.css("ul.directory.dir-col > li > a::attr('href')"):
url = response.urljoin(href.extract())
yield scrapy.Request(url, callback=self.parse_category)
def parse_category(self, response):
for sel in response.xpath("//ul[@class='directory-dir']/li"):
title = sel.xpath("a/text()").extract_first()
url = sel.xpath("a/@href").extract_first()
yield scrapy.Request(url, callback=self.parse_category_items)
def parse_category_items(self, response):
l = ItemLoader(item=ScrapyDmozItem(), response=response)
l.add_css("title", "div > h3::text")
l.add_css("brand", "span.product-brand::text")
l.add_css("price", "span.product-price::text")
yield l.load_item()
```
总结
在本文中,我们解释了如何使用 Scrapy 网络爬虫框架来获取和处理数据。现在您已经知道了 Scrapy 的许多好处和用例。当然,这只是一个简单的例子,您可以根据自己的需要扩展和自定义它。Scrapy 带来了许多强大的功能和资源,将大大优化您的数据抓取工作流程,并让抓取数据变得更加轻松。
鉴于Scrapy的优点和用例,我们强烈建议数据分析师、在线营销人员和其他制定业务决策的人士亲自尝试 Scrapy 并了解其强大的功能。