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环境的搭建与入门教程的主要内容,如果未能解决你的问题,请参考以下文章

Scrapy教程——搭建环境创建项目爬取内容保存文件

Ubuntu16.04下Scrapy环境的搭建

Scrapy爬虫框架入门

Scrapy 开发环境搭建

Python爬虫实战,Scrapy实战,爬取旅行家游记信息

Learning Scrapy:《精通Python爬虫框架Scrapy》Windows环境搭建