Scrapy环境的搭建与入门教程
Posted RuiKing2010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scrapy环境的搭建与入门教程相关的知识,希望对你有一定的参考价值。
Scrapy = Scratch+Python , Scratch 这个单词是抓取的意思 要想批量下载大量的内容,比如知乎的所有的问答,一些简单的 Python 爬虫知识那便显得游刃不有余了点。 于是乎,爬虫框架 Scrapy 就这样出场了! http://doc.scrapy.org/en/latest/ 环境搭建: 1. 安装setuptools( http://blog.csdn.net/pfm685757/article/details/48651389) setuptools是Python distutils增强版的集合,它可以帮助我们更简单的创建和分发Python包,尤其是拥有依赖关系的。安装Python时为可选项,建议勾选。 2. 安装Twisted( http://twistedmatrix.com/trac/)你可以通过 https://pypi.python.org/pypi这个网站找到相关依赖包资源的下载。 Zope.Interface (required) PyWin32 (required) PyOpenSSL (needed for SSL) Twisted 是用 Python 实现的基于事件驱动的网络引擎框架。( http://www.aosabook.org/en/twisted.html ) Python 支持多继承,但是不支持接口, zope.inteface 是其三方的接口实现库,在 Twisted 中有大量使用( http://blog.csdn.net/vinrex/article/details/38118547 ) Python 是没有自带访问 windows 系统 API 的库的,需要下载。库的名称叫 pywin32 。( http://www.linuxidc.com/Linux/2011-12/48525.htm ) PyOpenSSL 用于 SSL 安全协议认证。( http://blog.sina.com.cn/s/blog_a73687bc0101ecp7.html ) 3. 安装lxml lxml是一种使用 Python 编写的库,可以迅速、灵活地处理 XML。 4. 安装Scrapy 直接在cmd中输入easy_installscrapy回车即可。 Scrapy 入门 进入您打算存储代码的目录中,运行下列命令: scrapy startproject tutorial 该命令将会创建包含下列内容的 tutorial 目录: Spider的name用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。 进入项目的根目录,执行下列命令启动spider: scrapy crawl dmoz 您需要进入项目的根目录,执行下列命令来启动shell: scrapy shell"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/" 最简单存储爬取的数据的方式是使用 Feed exports: scrapy crawl dmoz -oitems.json 该命令将采用 JSON 格式对爬取的数据进行序列化,生成 items.json 文件。 命令行工具 scrapy.cfg 存放的目录被认为是 项目的根目录 。该文件中包含 python 模块名的字段定义了项目的设置。 一般来说,使用 scrapy 工具的第一件事就是创建您的 Scrapy 项目 : scrapystartproject myproject 接下来,进入到项目目录中 : cd myproject 这时候您就可以使用 scrapy 命令来管理和控制您的项目了。 创建一个新的 spider: scrapygenspider mydomain mydomain.com fetch:该命令以spider下载页面的方式获取页面。例如,如果spider有 USER_AGENT 属性修改了 User Agent,该命令将会使用该属性。 $ scrapy fetch --nolog http://www.example.com/some/page.html $ scrapy fetch --nolog --headers http://www.example.com/ View: 在浏览器中打开给定的URL,并以Scrapy spider获取到的形式展现。 有些时候spider获取到的页面和普通用户看到的并不相同。 因此该命令可以用来检查spider所获取到的页面,并确认这是您所期望的。 $ scrapy viewhttp://www.example.com/some/page.html Shell: 以给定的URL(如果给出)或者空(没有给出URL)启动Scrapy shell。 查看 Scrapy终端(Scrapyshell) 获取更多信息。 $ scrapy shellhttp://www.example.com/some/page.html 当 shell 载入后,您将得到一个包含 response 数据的本地 response 变量。输入 response.body 将输出 response 的包体, 输出 response.headers 可以看到 response 的包头。 更为重要的是,当输入 response.selector 时, 您将获取到一个可以用于查询返回数据的 selector( 选择器 ) , 以及映射到 response.selector.xpath() 、 response.selector.css() 的 快捷方法 (shortcut):response.xpath() 和 response.css() 。 同时, shell 根据 response 提前初始化了变量 sel 。该 selector 根据 response 的类型自动选择最合适的分析规则 (XML vs html) 。 In [1]: sel.xpath('//title') Out[1]: [<Selector xpath='//title' data=u'<title>Open Directory - Computers: Progr'>] In [2]: sel.xpath('//title').extract() Out[2]: [u'<title>Open Directory - Computers: Programming: Languages: Python: Books</title>'] In [3]: sel.xpath('//title/text()') Out[3]: [<Selector xpath='//title/text()' data=u'Open Directory - Computers: Programming:'>] In [4]: sel.xpath('//title/text()').extract() Out[4]: [u'Open Directory - Computers: Programming: Languages: Python: Books'] In [5]: sel.xpath('//title/text()').re('(\\w+):') Out[5]: [u'Computers', u'Programming', u'Languages', u'Python'] Parse: 获取给定的URL并使用相应的spider分析处理。如果您提供 --callback 选项,则使用spider的该方法处理,否则使用 parse 。 Settings:在项目中运行时,该命令将会输出项目的设定值,否则输出Scrapy默认设定。 $ scrapy settings --getBOT_NAME Runspider:在未创建项目的情况下,运行一个编写在Python文件中的spider。 $ scrapy runspidermyspider.py Version:输出Scrapy版本。配合 -v 运行时,该命令同时输出Python, Twisted以及平台的信息,方便bug提交。 Items 爬取的主要目标就是从非结构性的数据源提取结构性数据,例如网页。 Scrapy提供 Item 类来满足这样的需求。 Item 对象是种简单的容器,保存了爬取到得数据。 其提供了 类似于词典 (dictionary-like) 的 API 以及用于声明可用字段的简单语法。 扩展Item 您可以通过继承原始的 Item 来扩展 item( 添加更多的字段或者修改某些字段的元数据 ) 。 例如 : classDiscountedProduct(Product): discount_percent = scrapy.Field(serializer=str) discount_expiration_date = scrapy.Field() 您也可以通过使用原字段的元数据 , 添加新的值或修改原来的值来扩展字段的元数据 : classSpecificProduct(Product): name = scrapy.Field(Product.fields['name'],serializer=my_serializer) 这段代码在保留所有原来的元数据值的情况下添加 ( 或者覆盖 ) 了 name 字段的 serializer 。 Item对象 class scrapy.item.Item ([arg]) 返回一个根据给定的参数可选初始化的 item 。 Item 复制了标准的 dict API 。包括初始化函数也相同。 Item 唯一额外添加的属性是 : fields 一个包含了 item 所有声明的字段的字典,而不仅仅是获取到的字段。该字典的 key 是字段 (field) 的名字,值是 Item声明 中使用到的 Field 对象。 字段(Field)对象 classscrapy.item.Field([arg]) Field 仅仅是内置的 dict 类的一个别名,并没有提供额外的方法或者属性。换句话说, Field 对象完完全全就是 Python 字典 (dict) 。被用来基于类属性 (classattribute) 的方法来支持 item声明语法 。以上是关于Scrapy环境的搭建与入门教程的主要内容,如果未能解决你的问题,请参考以下文章