Scrapy是一款非常成熟的爬虫框架,可以抓取网页数据并抽取结构化数据。(官方网站:www.scrapy.org)。
Requirements
Python 2.5, 2.6, 2.7 (3.x is not yet supported)
Twisted 2.5.0, 8.0 or above
w3lib
lxml or libxml2 (if using libxml2, version 2.6.28 or above is highly recommended)
simplejson (not required if using Python 2.6 or above)
pyopenssl (for HTTPS support. Optional, but highly recommended)
准备工作
操作系统:RHEL 5.9
Zlib版本:zlib-1.2.8
Python版本:Python-2.7
zope.interface版本:zope.interface-3.8.0
Twisted版本:Twisted-12.0.0
w3lib版本:w3lib-1.0
libxml2版本:libxml2-2.7.4
pyOpenSSL版本:pyOpenSSL-0.12
Scrapy版本:Scrapy-0.14
安装配置
1、安装zlib
下载地址:http://www.zlib.net/
2、安装Python
我的系统中已经安装的Python 2.7
下载地址:http://www.python.org/download/(需要代理)
http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz
默认情况下,Python程序被安装到/usr/local/lib/python2.7。
如果你的系统中还有其他版本的Python,例如我的系统中2.4版本的,所以要做一个符号链接:
[root@localhost python2.7]# mv /usr/bin/python /usr/bin/python.bak
[root@localhost python2.7]# ln -s /usr/local/bin/python /usr/bin/python
这样操作以后,在执行python,就生效了。
3、安装setuptools
这里主要是安装一个用来管理Python模块的工具,如果已经安装就跳过该步骤。如果你需要安装,可以参考下面的链接:
下载地址:http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg#md5=fe1f997bc722265116870bc7919059ea
chmod +x setuptools-0.6c11-py2.7.egg
./ setuptools-0.6c11-py2.7.egg
不过,在安装Python-2.7.2以后,可以看到Python的解压缩包里面有一个setup.py脚本,使用这个脚本可以安装Python一些相关的模块,执行命令:
[root@localhost Python-2.7.2]# python setup.py install
安装执行后,相关Python模块被安装到目录/usr/local/lib/python2.7/site-packages下。
4、安装zope.interface
下载地址:http://pypi.python.org/pypi/zope.interface/3.8.0
http://pypi.python.org/packages/source/z/zope.interface/zope.interface-3.8.0.tar.gz
安装完成后,可以在/usr/local/lib/python2.7/site-packages下面看到zope和zope.interface-3.8.0-py2.7.egg-info。
5、安装Twisted
下载地址:http://twistedmatrix.com/trac/
http://twistedmatrix.com/Releases/Twisted/12.0/Twisted-12.0.0.tar.bz2
注意:scrapy 0.14配合 twisted 11.1.0,目前发现bug,爬着爬着会出现不能爬行的情况。可以考虑降级twisted至11.0.0 或 升级scrapy至0.15 或升级twisted至12.0.0解决。
安装完成后,可以在/usr/local/lib/python2.7/site-packages下面看到twisted和Twisted-12.0.0-py2.7.egg-info。
6、安装w3lib
下载地址:http://pypi.python.org/pypi/w3lib
http://pypi.python.org/packages/source/w/w3lib/w3lib-1.0.tar.gz#md5=f28aeb882f27a616e0fc43d01f4dcb21
安装完成后,可以在/usr/local/lib/python2.7/site-packages下面看到w3lib和w3lib-1.0-py2.7.egg-info。
7、安装libxml2
下载地址:http://download.chinaunix.net/download.php?id=28497&ResourceID=6095
http://download.chinaunix.net/down.php?id=28497&ResourceID=6095&site=1
或者,可以到网站http://xmlsoft.org上面找到相应版本的压缩包。
8、安装pyOpenSSL
该步骤可选,对应的安装包下载地址为:
下载地址:https://launchpad.net/pyopenssl
9、安装Scrapy
下载地址:http://scrapy.org/download/
http://pypi.python.org/pypi/Scrapy
http://pypi.python.org/packages/source/S/Scrapy/Scrapy-0.14.0.2841.tar.gz#md5=fe63c5606ca4c0772d937b51869be200
验证
安装lxml时报错:(参考官网http://lxml.de/)
…… src/lxml/lxml.etree.c:194706: 错误:‘xsltDocDefaultLoader’ 未声明 (在此函数内第一次使用) src/lxml/lxml.etree.c:194715: 错误:‘xsltDocLoaderFunc’ 未声明 (在此函数内第一次使用) src/lxml/lxml.etree.c:194715: 错误:expected ‘)’ before ‘__pyx_f_4lxml_5etree__xslt_doc_loader’ error: command 'gcc' failed with exit status 1
解决:就是gcc没法编译,很多声明错误,重新安装libxslt即可。
再次验证
又报错如下:
…… File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/__init__.py", line 28, in <module> from scrapy.selector.lxmlsel import * File "/usr/local/lib/python2.7/site-packages/Scrapy-0.14.4-py2.7.egg/scrapy/selector/lxmlsel.py", line 5, in <module> from lxml import etree ImportError: /usr/local/lib/python2.7/site-packages/lxml-3.4.4-py2.7-linux-x86_64.egg/lxml/etree.so: undefined symbol: exsltMathXpathCtxtRegister
在python命令行验证:
>>> from lxml import etree Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: /usr/local/lib/python2.7/site-packages/lxml-3.4.4-py2.7-linux-x86_64.egg/lxml/etree.so: undefined symbol: exsltMathXpathCtxtRegister分析原因:
[root@localhost libxslt-1.1.26]# ldd /usr/local/lib/python2.7/site-packages/lxml-3.4.4-py2.7-linux-x86_64.egg/lxml/etree.so linux-vdso.so.1 => (0x00007fffd55fd000) libxslt.so.1 => /usr/lib64/libxslt.so.1 (0x00002b0120dcf000) libexslt.so.0 => /usr/lib64/libexslt.so.0 (0x00002b0121009000) libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x00002b012121b000) libz.so.1 => /usr/local/lib/libz.so.1 (0x00002b012155d000) libm.so.6 => /lib64/libm.so.6 (0x00002b012178a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b0121a0d000) libc.so.6 => /lib64/libc.so.6 (0x00002b0121c29000) libdl.so.2 => /lib64/libdl.so.2 (0x00002b0121f83000) /lib64/ld-linux-x86-64.so.2 (0x0000003484a00000)这个错误是因为so没有找到,因为我把libxml2,libxslt都安装在了自己的文件夹下,所以需要修改一下环境变量LD_LIBRARY_PATH的值,把包含两个库so的目录加入
解决:
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
最终验证
[root@localhost libxslt-1.1.26]# ldd /usr/local/lib/python2.7/site-packages/lxml-3.4.4-py2.7-linux-x86_64.egg/lxml/etree.so linux-vdso.so.1 => (0x00007fffd55fd000) libxslt.so.1 => /usr/local/lib/libxslt.so.1 (0x00002b0120dcf000) libexslt.so.0 => /usr/local/lib/libexslt.so.0 (0x00002b0121009000) libxml2.so.2 => /usr/local/lib/libxml2.so.2 (0x00002b012121b000) libz.so.1 => /usr/local/lib/libz.so.1 (0x00002b012155d000) libm.so.6 => /lib64/libm.so.6 (0x00002b012178a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b0121a0d000) libc.so.6 => /lib64/libc.so.6 (0x00002b0121c29000) libdl.so.2 => /lib64/libdl.so.2 (0x00002b0121f83000) /lib64/ld-linux-x86-64.so.2 (0x0000003484a00000)
<span style="font-size:12px;">[root@localhost packages]# scrapy Scrapy 0.14.4 - no active project Usage: scrapy <command> [options] [args] Available commands: fetch Fetch a URL using the Scrapy downloader runspider Run a self-contained spider (without creating a project) settings Get settings values shell Interactive scraping console startproject Create new project version Print Scrapy version view Open URL in browser, as seen by Scrapy Use "scrapy <command> -h" to see more info about a command</span>
总结
安装一个软件,总是先上网搜集大家的经验,然后觉得哪个靠谱,就按照哪个流程走,往往会使安装过程变复杂,因为
一、大家的安装环境貌似总是千差万别,所有版本之间不一定适用;
二、有时候博客上写的或许是没有得到更新的博客或经验,导致即时按照流程走下来,也未必会成功。
所以我个人觉得最快的方式有以下几种:
一、按照官网流程安装;
二、先下载要安装的包,然后根据REDME文件说明的进行安装,包中一般都会有对依赖包、安装流程的介绍等。
总之不能一开始就盲目在网上找经验之谈,未必适合自己,如果按自己的方式安装过程中出问题了,再去求助大牛有何不可?或者这样效率会更高。