Scrapy环境的搭建与入门教程

Scrapy = Scratch+Python Scratch 这个单词是抓取的意思
要想批量下载大量的内容,比如知乎的所有的问答,一些简单的 Python 爬虫知识那便显得游刃不有余了点。
于是乎,爬虫框架 Scrapy 就这样出场了!
环境搭建:
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所获取到的页面,并确认这是您所期望的。
Shell: 以给定的URL(如果给出)或者空(没有给出URL)启动Scrapy shell。 查看  Scrapy终端(Scrapyshell) 获取更多信息。
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声明语法  
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值