Skip to main content

教程:如何使用Python Scrapy爬取Amazon数据

Scrapy是一个用于爬网网站并提取结构化/非结构化数据的应用程序框架,可用于各种应用程序,例如数据挖掘,信息处理或信息归档

众所周知,这是"数据"时代。 数据无处不在,每个组织都希望与数据合作并将其业务推向更高的水平。 在这种情况下,Scrapy扮演着至关重要的角色,向这些组织提供数据,以便他们可以在各种应用程序中使用它。 Scrapy不仅能够从网站中抓取数据,而且还能够从Web服务中抓取数据。 例如,Amazon API,Twitter / Facebook API。

如何安装Scrapy?

以下是在系统中安装Scrapy所需安装的第三方软件和软件包。

・ Python:由于Scrapy是使用Python语言构建的,因此必须首先安装它。

・ pip:pip是python软件包管理器工具,可维护软件包存储库并自动安装python库及其依赖项。 最好根据系统OS安装pip,然后尝试按照标准方式安装Scrapy。

・ lxml:这是一个可选软件包,但如果愿意删除html数据,则需要安装。 lxml是一个python库,可帮助构造html树,因为网页使用html层次结构来组织信息或数据。

可以使用pip安装Scrapy(这是安装Python软件包的典型方法)。 要使用Scrapy安装,请运行:

pip install scrapy 

如何开始使用Scrapy?

Scrapy是一个应用程序框架,它提供了许多命令来创建和使用应用程序。 在创建应用程序之前,必须先建立一个新的Scrapy项目。 输入您要存储代码并运行的目录:

scrapy startproject test_project

 

这将在同一目录中创建一个名为xyz的目录,其内容如下:

test_project/

    scrapy.cfg

 test_project/

     __init__.py

     items.py

     pipelines.py

     settings.py

     spiders/

          __init__.py

 

作为应用程序框架,Scrapy遵循项目结构以及面向对象的编程风格,以定义整个应用程序的项目和蜘蛛程序。 scrapy为用户创建的项目结构具有

・ scrapy.cfg:这是一个项目配置文件,其中包含用于设置项目模块的信息以及其部署信息。

・ test_project:这是一个应用程序目录,其中包含许多不同的文件,这些文件实际上负责运行和从Web URL抓取数据。

・ items.py:项目是将与抓取的数据一起加载的容器; 它们就像简单的Python字典一样工作。 尽管人们可以将普通的python字典与Scrapy结合使用,但Items提供了针对填充未声明字段的附加保护,从而防止了输入错误。 通过创建scrapy.Item类并将其属性定义为scrapy.Field对象来声明它们。

・ pipelines.py:处理组件,蜘蛛抓取了一个项目后,将其发送到项目管道,该项目通过多个顺序执行的组件对其进行处理。每个项目管道组件都是一个Python类,必须实现一个称为process_item的方法来处理被抓取的项目 项目。 它接收一个项目并对其执行操作,还决定该项目是应该继续通过管道,还是应该删除并不再处理。 如果要删除项目,则会引发DropItem异常以删除它。

・ settings.py:它允许自定义所有Scrapy组件的行为,包括核心,扩展,管道和蜘蛛本身。 它提供了键-值映射的全局名称空间,代码可用于从中提取配置值。

・ spiders:Spiders是一个目录,其中包含所有Python类的蜘蛛/爬虫。 每当有人运行/爬网任何蜘蛛时,scrapy都会查看该目录并尝试查找其名称由用户提供的蜘蛛。 蜘蛛定义了将如何爬取某个站点或一组站点,包括如何执行爬网以及如何从其页面中提取数据。 换句话说,Spider是定义一个特定网站的爬网和解析行为的自定义行为的地方,Spiders必须定义三个主要属性,即start_urls指示要删除的URL,allowed_domains仅定义那些需要的域名 抓取并解析是一种方法,当任何响应来自于已提交的请求时都会被调用。 这些属性很重要,因为它们构成了Spider定义的基础。

开始抓取Amazon网页 

为了了解Scrapy的工作原理以及在实际情况下如何使用Scrap,我们来看一个例子,在该示例中我们将爬取与某种产品相关的数据,例如产品名称,价格,类别及其在amazon.com网站上的可用性。 让我们将此项目命名为amazon。 如前所述,在执行任何操作之前,请先使用以下命令创建一个scrapy项目。

scrapy startproject amazon 

该命令将在本地文件夹中创建名称amazon的目录,其结构如前所述。 现在我们需要创建三个不同的部件,以使抓取过程成功进行,它们是,

00001. 使用我们要提取的字段更新items.py。 例如产品名称,类别,价格等。

00002. 创建一个新的爬虫,在其中我们需要定义必要的元素,例如allowed_domains,start_urls,parse方法以解析响应对象。

00003. 更新pipelines.py以进行进一步的数据处理。

让我们先从items.py开始。 下面的代码描述了框架中多个必填字段。

现在创建蜘蛛,我们有不同的选择。

1. 我们可以在Spiders目录中创建简单的Python类并将其导入必要的模块

2. 我们可以使用scrapy框架本身提供的默认实用程序。

在这里,我们将使用默认的实用程序genspider在框架中创建Spiders。 它将自动在Spiders目录中创建具有默认模板的类。

scrapy genspider AmazonProductSpider

在新创建的AmazonProductSpider中,我们需要定义其名称,URL和可能的域以爬取数据。 我们还需要实现parse方法,其中可以定义自定义命令来填充项目字段,并且可以对响应对象进行进一步处理。 这种解析方法不会返回结果,但会产生数据 python中的Yield表示python将从上次停止的地方开始执行。

这是Spider的代码。 为Spider定义了一个名称,该名称在所有Spider中都应该是唯一的,因为scrapy使用其名称搜索Spider。 我们将使用amazon.com初始化allowed_domains,因为我们要从该域中抓取数据,并且start_urls指向同一域的特定页面。

在解析方法中,定义了一个项目对象,并使用响应对象的xpathutility填充了必需的信息。 xpath是一个搜索功能,用于在html树结构中查找元素。 最后,让我们产生items对象,以便scrapy可以对其进行进一步处理。

接下来,在抓取数据之后,scrapy调用Item管道来处理它们。 这些被称为管道类,我们可以使用这些类将数据存储在文件或数据库中或以任何其他方式。 这是默认类(例如Items),scrapy为用户生成。

管道类实现了process_item方法,每一次由Spider生成项目时都会调用该方法。 它以item和spider类作为参数,并返回一个dict对象。 因此,对于此示例,我们只是按原样返回item dict。

在使用管道类之前,必须在settings.py模块中启用它们,以便scrapy可以在从Spider解析后调用item对象。

让我们将1-1000到管道类的数字指定为值,该值定义了scrapy框架调用这些类的顺序。 此值定义应首先通过scrapy运行哪个管道类。

现在,完成所有设置后,我们需要开始scrapy并调用Spider,以便它可以开始发送请求并接受响应对象。

我们可以通过蜘蛛网的名字来称呼它,因为蜘蛛网是唯一的,而且很容易找到它。

抓取抓取AmazonDeals

如果要将项目字段存储在文件中,则可以在管道类中编写代码,否则可以在调用Spider时定义文件名,以便scrapy可以自动将返回对象从管道类推入给定文件。

scrapy crawl AmazonDeals -o items.json

因此,以上命令会将item对象保存在items.json文件中。 当我们在管道类中返回项目对象时,scrapy会自动将这些项目对象存储到items.json中。 这是此过程的输出。

好了,目前为止,我们已经成功地使用scrapyAmazon进行抓取。 我们已经涵盖了与Scrapy及其相关模块有关的大多数内容,并且还通过示例了解了如何独立使用它。

 


Comments

Popular posts from this blog

We may be able to produce plastic with carbon dioxide someday

Due to the overuse of humans, there are now about 8 billion tons of plastic waste piled up on the surface and in the ocean. It is no wonder that plastics have been in poor reputation in recent years. But the importance of plastic is also unquestionable. The invention of plastic revolutionized life in the 20th century. It is durable, versatile, and hygienic. Such materials are almost non-existent in nature. If there is no plastic, we will never create records, tapes, film, etc. Naturally, we will not be able to record music, film, or develop modern medicine. Auto parts, light aircraft materials, satellites and spacecraft also rely on plastics, and global travel and space exploration are possible, not to mention computers, mobile phones and a wide range of networking technologies. Look around, if there is no plastic, our life will be difficult. Despite the importance of plastics, the disposal of plastics has always been a tricky issue. Not only that, but the source of plastic is...

布谷

作者:亚莱克斯   1   1月的清晨6点钟,风中的布赖顿海滨灰蒙蒙的,又湿又冷。可对凯茨·弗拉德来说,却再也找不出比这里更好的地方了。昨天的小警员,今天成了警探,什么也阻挡不了她。   凯茨身穿着比基尼短裤坐在台阶上,早餐之前她要完成4英里快速跑。想到这里,她迅速套上短袜、护膝,穿上艳丽的健身衣,两脚伸进运动鞋里。下楼出门前,她顺手抓起一副白色棉质运动手套,毕竟冬天到了。   凯茨的公寓在一条巷子里,门前是一段平缓的下坡路。此时,她迈着舞步一般轻松的步子朝海边慢步走去。刚出门的时候,冷风吹在脸上还微微有些疼。没过多久,风就让人振奋起来,在她脸上吹出了红晕。长期锻炼的凯茨称不上胸部丰满,今天她就没穿胸衣。现在她越跑越热,只觉得毛孔发汗。不一会儿,人就觉不到什么寒意了。活动开了,她准备做二英里快速跑。今天她感觉不错,未来终于在眼前渐渐显出轮廓。大学毕业6年了,她的目标就是像今天这样拥有一份体面的工作,保持健康独立,工作得心应手,而且还能不断得到提升。   她向东往海豚馆的方向跑去,经过海豚馆的时候加快了脚步。为了练力量,周二和周四凯茨都在海滩上跑步。今天是星期一,她要在速度上跟自己较量一番。远处房顶上显出微红的曙光,黄色的街灯渐渐暗淡了下去。   路上渐渐有了几辆车,它们在沾满露水的路上缓缓行驶着。凯茨到了海豚馆,穿过马路沿着缓坡费力地往上跑,几乎没有注意到身边的车辆。一辆巡逻车缓缓驶来,司机按了一下喇叭,和她并肩行驶。凯茨跑完了全程,才回过头注意到这辆车。司机哈里干警察这一行已经有十个年头了,现在正是发胖的年纪。   “早晨好。”凯茨上气不接下气地说道。   “这身衣服挺合身嘛。”   “别逗了,忙你的正事去吧。”凯茨朝他笑了笑。   “对了,是不是该称弗拉德警探,现在您是高我们一头了。”   “哈里,你也会有这么一天的。”   警车里的对讲机响了起来,哈里咧嘴一笑;“行了,不管怎么样,好好干吧。”他一边对着对讲机回话,一边来了个大转弯,回头向城里驶去。   “对,好好干,”凯茨在心里对自己说:“新人要做出个样子来。”   她慢跑到终点,心不在焉地伸了伸四肢,然后穿过马路朝自家走去。   隔壁莱蒂斯夫人穿着晨衣,正到门口取牛奶。凯茨心里哼着摇滚,脚下迈着舞步,跳着向老人过去。   “早晨好,夫人。天气不错啊。”   “我可不这么看,太冷了,简直出不了门。”   “多...

《菊与刀》――解读日本人

第一章 任务―研究日本 由在美国曾经全力以赴与之战斗的敌人中,日本人的脾气是最琢磨不透的。这个强大对手,其行动和思维习惯竞与我们如此迥然不同,以至我们必须认真加以对待,这种情况在其他战争中是没有的。我们正如前此1905年的沙俄一样,作战的对手是一个不属于西方文化传统、而又充分武装和经过训练的民族。西方国家所公认的那些基于人性的战争惯例,对日本人显然是不存在的。这就使得太平洋上的战争不仅是一系列岛屿登陆作战和困难卓绝的后勤工作问题,从而使了解"敌性"成为一个主要问题。为了与之对抗,我们就必须了解他们的行动。 困难是巨大的。自从日本锁国的大门被打开以来的七十五年间,对日本人的描述总是使用一系列令人极为迷惑的"但是,又……"之类的词句,远非对世界其他民族的描述可比。一个严肃的观察家在论及其他非日本民族时,是不大会既说他们彬彬有礼,又加上一句说:"但是,他们又很蛮横、倔傲。"他也不会既说该民族无比顽固,又说:"但是,他们又极易适应激烈的革新";也不会既说该民族性格温顺,又说他们不轻易服从上级的控制;也不会既说他们忠诚、宽厚,又宣称:"但是他们又心存叛逆,满腹怨恨";也不会既说他们勇敢成性,又描述他们如何怯懦;也不会既说他们的行动完全出自考虑别人的评价,即自己的面子,又说他们具有真诚的善良倾慕西方文化,又渲染他们顽固的保守主义。他不会既写一本书讲这个民族如何普遍爱美,如何对演员和艺术家给予崇高荣誉,如何醉心于菊花栽培,又另外写一本书来补充说,该民族崇尚刀剑和武土的无尚荣誉。 然而,所有上述这些矛盾却成为有关日本论著中纵横交织的经纬。而且,都是千真万确。刀与菊,两者都是一幅绘画的组成部分。日本人生性极其好斗而又非常温和;黩武而又爱美;倔傲自尊而又彬彬有礼;顽梗不化而又柔弱善变;驯服而又不愿受人摆布;忠贞而又易于叛变;勇敢而又懦怯;保守而又十分欢迎新的生活方式。他们十分介意别人对自己的行为的观感,但当别人对其劣迹毫无所知时,又会被罪恶所征服。他们的军队受到彻底的训练,却又具有反抗性。 了解日本既已成为美国的当务之急,我们就不能对这些矛盾以及其他许多同样令人烦躁的矛盾置之不理了。严重的事态接二连三地出现在我们面前。日本人下一步将采取什么行动?能否不进攻日本本土而获致投降?我们是否应该...