网络爬取,也称为网络蜘蛛或屏幕抓取, 软件开发者 将其定义为“编写软件来迭代一组网页以提取内容”,它是一种出于各种原因从网络中提取数据的绝佳工具。

使用 网页爬虫,您可以从一组文章中抓取和抓取数据,挖掘大型博客文章或从亚马逊抓取定量数据以进行价格监控和机器学习,克服无法从没有官方 API 的网站获取内容的问题,或者只是为下一个更好的网络构建自己的原型。

在本教程中,我们将教您使用 Crawlbase 和 Scrapy 抓取和爬取网页的基础知识。作为示例,我们将使用 Amazon 搜索结果页面来提取产品 ASIN URL 和标题。完成本教程后,希望您拥有一个功能齐全的网页爬虫,它可以遍历 Amazon 上的一系列页面,从每个页面提取数据,并将其打印到您的屏幕上。

抓取器示例可以轻松扩展并用作从网络上爬行和抓取数据的个人项目的坚实层。

博客目标:

  • 了解 Scrapy 框架、其功能、架构和操作。
  • 学习创建自己的 亚马逊刮刀 在 Python Scrapy 中使用 Crawlbase。
  • 了解如何从亚马逊搜索结果页面中提取亚马逊产品页面的基础知识。

先决条件

要成功完成本教程,您需要 Crawlbase API 免费令牌 用于匿名抓取网页,并在本地机器上安装 Python 3 进行开发。

第 1 步 - 创建 Amazon Basic Sc​​raper

Scrapy 是一个 Python 抓取库; 它包括大多数在抓取时可以帮助我们的常用工具。 它加快了抓取过程,并由一个喜欢抓取和抓取网络的开源社区维护。

Crawlbase有一个Python抓取库;结合scrapy,我们保证我们的爬虫大规模匿名运行,不会被网站屏蔽。 Crawlbase API 是一个功能强大的薄层,可作为薄中间件运行在任何站点之上。

Crawlbase 和 Scrapy 在 PyPI(称为 pip)上有 Python 包。 的PyPIPython 包管理器由 Python 社区维护,作为开发人员所需的各种库的存储库。

使用以下命令安装 Crawlbase 和 Scrapy:

1
点安装爬虫库
1
pip安装scrapy

为刮刀创建一个新文件夹:

1
mkdir 亚马逊爬虫

导航到您在上面创建的刮板目录:

1
cd 亚马逊爬虫

为你的爬虫创建一个 Python 文件。 本教程的所有代码都将放在这个文件中。 我们在本教程的控制台中使用 Touch 命令,您可以使用您喜欢的任何其他编辑器。

1
触摸 myspider.py

让我们创建我们的第一个基本的scrapy spider AmazonSpider 继承自 scrapy.Spider. 根据 scrapy 文档,子类有 2 个必需的属性。 这 name 这是我们的蜘蛛的名称和 URL 列表 start_urls,我们将在此示例中使用一个 URL。我们还导入了 Crawlbase API。它允许我们构建将通过 Crawlbase API 而不是原始站点的 URL。这可以避免阻止和验证码页面。

将以下代码粘贴到 myspider.py

1
2
3
4
5
6
7
8
9
10
11
进口 scrapy

crawlbase.crawlbase_api 进口 抓取API

# 从 Crawlbase 获取 API 令牌并将其替换为 YOUR_TOKEN
api = 爬行API({ '令牌': '你的令牌' })

亚马逊蜘蛛(scrapy.Spider):
姓名 = '亚马逊蜘蛛' # 用于提取 ASIN 页面和标题的亚马逊搜索结果 URL
网址 = ['https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=cold-brew+coffee+makers&page=1'] # 让 URL 通过 Crawlbase API
开始网址 = 名单(地图(拉姆达 网址:api.buildURL({ '网址': 网址}), 网址))

运行尚未提取数据的抓取工具,但您应该将其指向 Crawlbase API 端点并获取 Crawled 200 来自 Scrapy。

1
scrapy runpider myspider.py

结果应该是这样的,请注意,通过 Crawlbase 对 Amazon 结果页面的请求通过了 200 响应代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2018-07-09 02:05:23 [scrapy.utils.log] 信息:Scrapy 1.5.0 开始(机器人:scrapybot)
2018-07-09 02:05:23 [scrapy.utils.log] 信息:版本:lxml 4.2.3.0、libxml2 2.9.8、cssselect 1.0.3、parsel 1.5.0、w3lib 1.19.0、Twisted 18.4.0 ,Python 2.7.15(默认,1 年 2018 月 16 日,44:37:4.2.1)-[GCC 9.0.0 兼容 Apple LLVM 900.0.39.2 (clang-18.0.0)],pyOpenSSL 1.1.0(OpenSSL 27h 2018 月 2.2.2 日) 16.7.0),密码学 86,平台 Darwin-64-x386_64-iXNUMX-XNUMXbit
2018-07-09 02:05:23 [scrapy.crawler] 信息:覆盖设置:{'SPIDER_LOADER_WARN_ONLY': True}
2018-07-09 02:05:23 [scrapy.middleware] 信息:启用扩展:
...
2018-07-09 02:05:23 [scrapy.core.engine] 信息:蜘蛛打开
2018-07-09 02:05:23 [scrapy.extensions.logstats] 信息:抓取 0 页(以 0 页/分钟),抓取 0 项(以 0 项/分钟)
2018-07-09 02:05:23 [scrapy.extensions.telnet] 调试:Telnet 控制台监听 127.0.0.1:6023
2018-07-09 02:05:25 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://api.crawlbase.com/?token=TOKEN_HIDDEN&url=https%3A%2F%2Fwww.amazon.com%2Fs%2Fref%3Dnb_sb_noss%3Furl%3Dsearch-alias%253Daps%26field-keywords%3Dcold-brew%2Bcoffee%2Bmakers%26page%3D1&> (referer: None)
NotImplementedError:未定义 AmazonSpider.parse 回调
2018-07-09 02:05:25 [scrapy.core.engine] 信息:关闭蜘蛛(已完成)
2018-07-09 02:05:25 [scrapy.statscollectors] 信息:倾销 Scrapy 统计数据:
{'downloader/request_bytes': 390,
'下载者/request_count': 1,
'downloader/request_method_count/GET': 1,
“下载器/响应字节”:146800,
'下载者/response_count': 1,
...
'start_time': datetime.datetime(2018, 7, 8, 23, 5, 23, 681766)}
2018-07-09 02:05:25 [scrapy.core.engine] 信息:蜘蛛关闭(完成)

由于我们还没有编写解析器,所以代码只是加载了 start_urls 这只是通过 Crawlbase API 访问 Amazon 搜索结果的一个 URL,并将结果返回到默认解析器,该解析器默认情况下不执行任何操作。现在是时候进行下一步并编写简单的解析器来提取我们需要的数据了。

第 2 步 - 抓取 Amazon ASIN URL 和标题

让我们增强 myspider 类包含一个简单的解析器,该解析器提取搜索结果页面上所有 ASIN 产品的 URL 和标题。为此,我们需要知道需要使用哪些 css 选择器来指示 Scrapy 从这些标签中获取数据。在撰写本教程时。ASIN URL 位于 .a-link-normal css 选择器

使用我们的简单解析器增强蜘蛛类将为我们提供以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
进口 scrapy

crawlbase.crawlbase_api 进口 抓取API

# 从 Crawlbase 获取 API 令牌并将其替换为 YOUR_TOKEN
api = 爬行API({ '令牌': '你的令牌' })

亚马逊蜘蛛(scrapy.Spider):
姓名 = '亚马逊蜘蛛' # 亚马逊搜索结果 URL
网址 = ['https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&field-keywords=cold-brew+coffee+makers&page=1'] # 使 URL 通过 Crawlbase API
开始网址 = 名单(地图(拉姆达 网址:api.buildURL({ '网址': 网址}), 网址))

DEF 解析(自我,回应):
链接 in 响应.css('li.s-结果项'):
产量 {
'网址':链接.css('aa-link-normal.a-text-normal ::attr(href)').extract_first(),
'标题':链接.css('aa 链接正常 :: 文本').extract_first()
}

再次运行 scrapy 应该会为我们打印一些很好的 ASIN 页面 URL 及其标题。 😄

1
2
3
4
5
6
...
2018-07-09 04:01:18 [scrapy.core.scraper] DEBUG: Scraped from <200 https://api.crawlbase.com/?token=TOKEN_HIDDEN&url=https%3A%2F%2Fwww.amazon.com%2Fs%2Fref%3Dnb_sb_noss%3Furl%3Dsearch-alias%253Daps%26field-keywords%3Dcold-brew%2Bcoffee%2Bmakers%26page%3D1&>
{'url':'https://www.amazon.com/Airtight-Coffee-Maker-Infuser-Spout/dp/B01CTIYU60/ref=sr_1_5/135-1769709-1970912?ie=UTF8&qid=1531098077&sr=8-5&keywords= cold-brew+coffee+makers', 'title': '密封冷泡冰咖啡壶和茶壶带壶嘴 - 1.0L/34oz 椭圆形 RJ3 酿造玻璃水瓶,带可拆卸不锈钢过滤器'}
2018-07-09 04:01:18 [scrapy.core.scraper] DEBUG: Scraped from <200 https://api.crawlbase.com/?token=TOKEN_HIDDEN&url=https%3A%2F%2Fwww.amazon.com%2Fs%2Fref%3Dnb_sb_noss%3Furl%3Dsearch-alias%253Daps%26field-keywords%3Dcold-brew%2Bcoffee%2Bmakers%26page%3D1&>
{'url':'https://www.amazon.com/KitchenAid-KCM4212SX-Coffee-Brushed-Stainless/dp/B06XNVZDC7/ref=sr_1_6/135-1769709-1970912?ie=UTF8&qid=1531098077&sr=8-6&keywords=冷酿+咖啡+制造商','标题':'KitchenAid KCM4212SX 冷酿咖啡机,拉丝不锈钢'}
...

Python Scrapy Web Scraper 框架的架构

Scrapy web scraper 是一个用 Python 精心创建的强健的开源网络爬虫框架。
网页刮板 开发人员都喜欢 Scrapy。它以无与伦比的效率指导他们从网站提取和抓取数据。

当一个项目启动时,有几个文件开始与 Scrapy 的主要组件交互。观察 Scrapy 框架可以发现,它的核心是引擎。引擎运行四个关键部分:

  • 蜘蛛
  • 项目管道
  • 下载器
  • 调度器

让我们将他们的工作分为几个简单的步骤:

  1. 在 Scrapy 网络抓取的初始阶段,通信是通过 Spiders 实现的。这些 Spiders 充当定义各种抓取方法的类。用户调用这些方法。它们允许 Scrapy 网络抓取工具向引擎发送请求。请求包括要抓取的 URL 和需要提取的信息。Scrapy 引擎至关重要。它控制数据流并触发抓取中的关键事件。它是整个操作的管理者。
  2. 一旦引擎收到请求,它就会被定向到调度程序,调度程序管理要执行的任务的顺序。如果提供了多个 URL,调度程序会将它们排入队列进行处理。
  3. 引擎还接收来自调度程序的请求,调度程序已预先安排了任务。然后这些请求被发送到下载器模块。 Downloader的工作是获取指定网页的HTML代码并将其转换为Response对象。
  4. 之后,Spider 获取 Response 对象。它使用它来运行 Spider 类中定义的特定抓取方法。之后,处理后的数据将移动到 ItemPipeline 模块。在那里,它会经历许多转换步骤。这些步骤可能包括清理、数据验证或插入数据库。

总而言之,Scrapy 框架有关键部分。它包括定义抓取方法的 Spider。它还有控制数据流的 Scrapy Engine。还有管理任务顺序的 Scheduler。还有获取网页内容的 Downloader。最后,还有对提取的数据应用步骤的 ItemPipeline。每个组件在确保高效且有组织的 Scrapy 网页抓取过程中都发挥着至关重要的作用。

为什么 Scrapy 应该是你的首选?

当您必须抓取网页时,Scrapy 网络抓取工具因几个令人信服的原因而成为无与伦比的选择。让我们讨论一下 Scrapy 的功能,并了解为什么它应该成为您首选的网络抓取工具。

多功能

Scrapy Web Scraper 的与众不同之处在于其天生的多功能性和灵活性。该框架巧妙地克服了网页的障碍。它还解决了数据提取的复杂性。它是那些专注于网页抓取的人的可靠伙伴,使整个过程既方便又高效。

轻松网页抓取

Scrapy 框架擅长以极高的精度抓取网页。Scrapy 提供了一种简单的网页抓取方法。它让开发人员专注于提取,而不是复杂的技术。

无论您是浏览网站的复杂结构还是提取数据,Scrapy 都能提供流畅的体验。它简化了浏览网页的复杂任务,使其成为初学者和专家开发人员的理想伴侣。

Python 简化

在编程语言界,Python 以其简单性和易读性而闻名。Scrapy 是一个基于 Python 的框架,继承了这些特质。这使其成为刚开始进行网络抓取的人员的绝佳选择。Scrapy 中的 Python 代码很熟悉。这使得学习变得更容易,并且为制定抓取逻辑提供了更好的环境。

Scrapy 提供了如此惊人的功能,简化了您抓取网页的方式。从发起请求到解析和存储数据,Scrapy 巧妙地简化了每个步骤。它提供了一个完整的框架。它用于构建可扩展且高效的蜘蛛。蜘蛛是针对各种抓取项目定制的。

Scrapy 代理支持的匿名性

在网络抓取中保持匿名性至关重要,而 Scrapy 在这方面表现出色。通过内置的代理支持,Scrapy 可确保您的爬虫保持隐身状态。在处理 IP 禁令或验证码时,此功能非常有用,它提供了强大的解决方案来克服抓取过程中的潜在障碍。这种 Scrapy 代理支持为您的抓取过程增加了一层额外的弹性。

强大的网页抓取功能

Scrapy web scraper 是强大的网络抓取功能的代名词。它简化了从发送请求到解析和存储数据的整个过程。它的效率和可靠性使它不可或缺。它从不同的网站提取数据并且表现良好。无论您是初学者开发人员还是在该领域拥有 10 年经验,Scrapy 代理都为您提供了轻松浏览大量网络数据所需的工具。它的架构是基于组件的。它鼓励定制,让开发人员创建抓取工作流程以满足项目要求。

使用 Crawlbase 体验更高级别的抓取

在本教程中,我们学习了网络爬取和抓取的基础知识。我们使用 Crawlbase API 和 Scrapy 来使我们的抓取工具对可能阻止我们请求的网站隐藏。我们还学习了如何从亚马逊搜索结果页面中提取亚马逊产品页面的基础知识。您可以将示例更改为您需要的任何网站,并开始使用 Scrapy 和 Crawlbase 匿名抓取数千个页面。

我们希望你喜欢这个教程,我们希望很快见到你 爬虫库. 快乐的爬行和刮擦!