Scrapy环境的搭建与入门教程

来源:互联网 发布:行政区域数据 编辑:程序博客网 时间:2024/05/22 16:59
Scrapy = Scratch+PythonScratch这个单词是抓取的意思
要想批量下载大量的内容,比如知乎的所有的问答,一些简单的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对象
classscrapy.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声明语法 
0 0
原创粉丝点击