Scrapy 示例 —— Web 爬虫框架
admin
2023-07-31 00:38:28
0

在这个教材中,我们假定你已经安装了Scrapy。假如你没有安装,你可以参考这个安装指南。

我们将会用开放目录项目(dmoz)作为我们例子去抓取。

这个教材将会带你走过下面这几个方面:

  1. 创造一个新的Scrapy项目
  2. 定义您将提取的Item
  3. 编写一个蜘蛛去抓取网站并提取Items。
  4. 编写一个Item Pipeline用来存储提出出来的Items

Scrapy由Python写成。假如你刚刚接触Python这门语言,你可能想要了解这门语言起,怎么最好的利用这门语言。假如你已经熟悉其它类似的语言,想要快速地学习Python,我们推荐这种深入方式学习Python。假如你是新手,想从开始使用Python学习,可以尝试去看看非程序员Python资源列表。

创造一个项目

在你要抓取之前,首先要建立一个新的Scrapy项目。然后进去你的存放代码目录,执行如下命令。

1 scrapy startproject tutorial

它将会创建如下的向导目录:

12345678910 tutorial/    scrapy.cfg    tutorial/        __init__.py        items.py        pipelines.py        settings.py        spiders/            __init__.py            ...

这是一些基本信息:

  • scrapy.cfg: 项目的配置文件。
  • tutorial/: 项目的python模块, 在这里稍后你将会导入你的代码。
  • tutorial/items.py: 项目items文件。
  • tutorial/pipelines.py: 项目管道文件。
  • tutorial/settings.py: 项目配置文件。
  • tutorial/spiders/: 你将要放入你的spider到这个目录中。

定义我们的Item

Items是装载我们抓取数据的容器。它们工作像简单的Python字典,它提供更多的保护,比如对未定义的字段提供填充功能防止出错。

它们通过创建scrapy.item.Item类来声明并定义它们的属性作为scrapy.item.Field 对象,就像是一个对象关系映射(假如你不熟悉ORMs,你将会看见它是一个简单的任务).

我们将需要的item模块化,来控制从demoz.org网站获取的数据,比如我们将要去抓取网站的名字,url和描述信息。我们定义这三种属性的域。我们编辑items.py文件,它在向导目录中。我们Item类看起来像这样。

123456 from scrapy.item import Item, Field class DmozItem(Item):    title = Field()    link = Field()    desc = Field()

这个看起来复杂的,但是定义这些item能让你用其他Scrapy组件的时候知道你的item到底是什么

我们第一个Spider

Spiders是用户写的类,它用来去抓取一个网站的信息(或者一组网站) 。
我们定义一个初始化的URLs列表去下载,如何跟踪链接,如何去解析这些页面的内容去提取 items.创建一个Spider,你必须是scrapy.spider.BaseSpider的子类, 并定义三个主要的,强制性的属性。

  • 名字: Spider的标识. 它必须是唯一的, 那就是说,你不能在不同的Spiders中设置相同的名字。
  • 开始链接:Spider将会去爬这些URLs的列表。所以刚开始的下载页面将要包含在这些列表中。其他子URL将会从这些起始URL中继承性生成。
  • parse() 是spider的一个方法, 调用时候传入从每一个URL传回的Response对象作为参数。response是方法的唯一参数。

    这个方法负责解析response数据和提出抓取的数据(作为抓取的items),跟踪URLs

    parse()方法负责处理response和返回抓取数据(作为Item对象) 和跟踪更多的URLs(作为request的对象)

这是我们的第一个Spider的代码;它保存moz/spiders文件夹中,被命名为dmoz_spider.py

12345678910111213 from scrapy.spider import BaseSpider class DmozSpider(BaseSpider):    name = \”dmoz\”    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):        filename = response.url.split(\”/\”)[2]        open(filename, \’wb\’).write(response.body)

为了使你的spider工作, 到项目的顶级目录让后运行:

1 scrapy crawl dmoz

crawl dmoz命令使spider去爬dmoz.org网站的信息。你将会得到如下类似的信息:

123456789 20080820 03:51:130300 [scrapy] INFO: Started project: dmoz20080820 03:51:130300 [tutorial] INFO: Enabled extensions: ...20080820 xtensions: ...20080820 会用开放目录项目(dmoz)作为我们例子去抓取。

这个教材将会带你走过下面这几个方面:

  1. 创造一个新的Scrapy项目
  2. 定义您将提取的Item
  3. 编写一个蜘蛛去抓取网站并提取Items。
  4. 编写一个Item Pipeline用来存储提出出来的Items

Scrapy由Python写成。假如你刚刚接触Python这门语言,你可能想要了解这门语言起,怎么最好的利用这门语言。假如你已经熟悉其它类似的语言,想要快速地学习Python,我们推荐这种深入方式学习Python。假如你是新手,想从开始使用Python学习,可以尝试去看看非程序员Python资源列表。

创造一个项目

在你要抓取之前,首先要建立一个新的Scrapy项目。然后进去你的存放代码目录,执行如下命令。

1 scrapy startproject tutorial

它将会创建如下的向导目录:

12345678910 tutorial/    scrapy.cfg    tutorial/        __init__.py        items.py        pipelines.py        settings.py        spiders/            __init__.py            ...

这是一些基本信息:

  • scrapy.cfg: 项目的配置文件。
  • tutorial/: 项目的python模块, 在这里稍后你将会导入你的代码。
  • tutorial/items.py: 项目items文件。
  • tutorial/pipelines.py: 项目管道文件。
  • tutorial/settings.py: 项目配置文件。
  • tutorial/spiders/: 你将要放入你的spider到这个目录中。

定义我们的Item

Items是装载我们抓取数据的容器。它们工作像简单的Python字典,它提供更多的保护,比如对未定义的字段提供填充功能防止出错。

它们通过创建scrapy.item.Item类来声明并定义它们的属性作为scrapy.item.Field 对象,就像是一个对象关系映射(假如你不熟悉ORMs,你将会看见它是一个简单的任务).

我们将需要的item模块化,来控制从demoz.org网站获取的数据,比如我们将要去抓取网站的名字,url和描述信息。我们定义这三种属性的域。我们编辑items.py文件,它在向导目录中。我们Item类看起来像这样。

123456 from scrapy.item import Item, Field class DmozItem(Item):    title = Field()    link = Field()    desc = Field()

这个看起来复杂的,但是定义这些item能让你用其他Scrapy组件的时候知道你的item到底是什么

我们第一个Spider

Spiders是用户写的类,它用来去抓取一个网站的信息(或者一组网站) 。
我们定义一个初始化的URLs列表去下载,如何跟踪链接,如何去解析这些页面的内容去提取 items.创建一个Spider,你必须是scrapy.spider.BaseSpider的子类, 并定义三个主要的,强制性的属性。

  • 名字: Spider的标识. 它必须是唯一的, 那就是说,你不能在不同的Spiders中设置相同的名字。
  • 开始链接:Spider将会去爬这些URLs的列表。所以刚开始的下载页面将要包含在这些列表中。其他子URL将会从这些起始URL中继承性生成。
  • parse() 是spider的一个方法, 调用时候传入从每一个URL传回的Response对象作为参数。response是方法的唯一参数。

    这个方法负责解析response数据和提出抓取的数据(作为抓取的items),跟踪URLs

    parse()方法负责处理response和返回抓取数据(作为Item对象) 和跟踪更多的URLs(作为request的对象)

这是我们的第一个Spider的代码;它保存moz/spiders文件夹中,被命名为dmoz_spider.py

12345678910111213 from scrapy.spider import BaseSpider class DmozSpider(BaseSpider):    name = \”dmoz\”    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):        filename = response.url.split(\”/\”)[2]        open(filename, \’wb\’).write(response.body)

为了使你的spider工作, 到项目的顶级目录让后运行:

1 scrapy crawl dmoz

crawl dmoz命令使spider去爬dmoz.org网站的信息。你将会得到如下类似的信息:

123456789 20080820 03:51:130300 [scrapy] INFO: Started project: dmoz20080820 03:51:130300 [

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...