很多python开发都在用scrapy框架开发抓取,我也算学习一下。虽然笔记序号为一,但是能不能坚持下去还不知道,写着看吧。官方网址:http://scrapy.org/。官方接受scrapy是纯python做的高效的web抓取框架,网络爬虫,后提取相关页面的数据。scrapy可以用于数据挖掘、监控和自动化测试等工作。据说google的大部分爬虫也是用python写的,但是不知道是否用了这个框架。可以肯定的是,这个框架能做很多事、很大,我只会用到很简单一部分。我做笔记是为自己学习记录,既不系统也不全面,建议大家到官方下载pdf的文档,进行学习,我也是通过pdf文档学习,并使用其中的例子修改为自己的形成笔记。为了不引起争议,直接用自己的站进行抓取学习。
开始学习了,linux的环境,是CentOS5,windows的环境是win7,python都是2.6,因为scrapy支持2.6、2.7,不支持3.X。直接使用easy_install安装,但是windows上安装的是0.14.3,linux上安装的0.12,官方网站上最新的开发版本是0.15。不知道为什么差距这么大。为了方便学习直接手动下载0.15,安装到linux上。
tar zxf Scrapy-X.X.X.tar.gz
cd Scrapy-X.X.X
python setup.py install
在linux上安装有警告,关于ssl的,如下
Running pyOpenSSL-0.13/setup.py -q bdist_egg –dist-dir /tmp/easy_install-rx8P0H/pyOpenSSL-0.13/egg-dist-tmp-g7Da22
warning: no previously-included files matching ‘*.pyc’ found anywhere in distribution
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_context’:
OpenSSL/ssl/connection.c:289: 警告:隐式声明函数 ‘SSL_set_SSL_CTX’
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_get_servername’:
OpenSSL/ssl/connection.c:313: 错误:‘TLSEXT_NAMETYPE_host_name’ 未声明 (在此函数内第一次使用)
OpenSSL/ssl/connection.c:313: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
OpenSSL/ssl/connection.c:313: 错误:所在的函数内只报告一次。)
OpenSSL/ssl/connection.c:320: 警告:隐式声明函数 ‘SSL_get_servername’
OpenSSL/ssl/connection.c:320: 警告:赋值时将整数赋给指针,未作类型转换
OpenSSL/ssl/connection.c: In function ‘ssl_Connection_set_tlsext_host_name’:
OpenSSL/ssl/connection.c:346: 警告:隐式声明函数 ‘SSL_set_tlsext_host_name’
error: Setup script exited with error: command ‘gcc’ failed with exit status 1
直接下载pyopenssl后安装,
http://pypi.python.org/packages/source/p/pyOpenSSL/pyOpenSSL-0.12.tar.gz
再执行 easy_install -U scrapy,安装成功。
在windows上除了安装pyopenssl还要w3lib、Twisted,但是处理比较简单,直接easy_install安装,如:C:\Python26\Scripts>easy_install.exe pyopenssl。
环境搭建完成,毕竟使用的linux服务器,所以还是在linux上学习。开始创建一个抓取项目,项目名为scrapytest.
>scrapy startproject simonzhang
创建项目完毕,目录树如下,:
simonzhang │ scrapy.cfg # 整个目录的配置 │ └─simonzhang # 项目模块,代码都放在这 │ items.py # 项目的items文件,相当于格式化抓取的内容,以字典形式返回 │ pipelines.py # 项目的pipelines,管理通道,主要是对抓取网页后的数据清洗、验证和入库 │ settings.py # 项目的设置文件, │ __init__.py │ └─spiders # 这个目录放的是蜘蛛文件, __init__.py
进入simonzhang目录,编辑simonzhang/items.py
from scrapy.item import Item, Field class ScrapytestItem(Item): # define the fields for your item here like: # name = Field() title = Field() link = Field() desc = Field() pass
编写第一个蜘蛛simonzhang/spiders/frist_simonzhang.py
from scrapy.spider import BaseSpider class DmozSpider (BaseSpider): name = "simonzhang_net" # 蜘蛛的名字,一个项目下每个蜘蛛名字必须是唯一的 allowed_domains = ["simonzhang.net"] start_urls = ["http://www.simonzhang.net/"] #下载列表,注意域名后面需要一个“/”因为稍后会用于截取文件名 def parse (self,response): # 抓取和保存的方法 filename = response.url.split("/")[2] open (filename, 'wb').write(response .body)
进入simonzhang/simonzhang/spiders目录运行下面命令:
scrapy crawl simonzhang_net
运行完毕,看到目录下已经有一个www.simonzhang.net的文件,打开文件可以看到是抓取为首页的文件。
scrapy 学习笔记 二
http://www.simonzhang.net/?p=1112
发表评论