大家好,我是一只小虫子,下面我来介绍一下我从出生到学会爬的过程.(这是一个心酸的故事),好久好久以前,我在浏览简书的时候看到了"爬",特别的吸引我,所以决定去学习一下大家都是怎么搬到的.于是我找到了python ,它看我骨骼惊奇,就给了我一个秘籍Scrapy,那么下面我们来一起看看这本秘籍吧.
Python
mac下python是2.7版本.python3和2.7是有一定的区别的,本秘籍是2.7版本的.刚开始学习 python 也是借鉴了廖雪峰老师的课堂传送门,
Scrapy
Scrapy在 python2.7上是比较稳定的,利用 Homebrew和wget来安装.传送门
安装pip工具
pip是基于python的管理工具包,话不多说,打开终端
wget https://bootstrap.pypa.io/get-pip.py
sudo python get-pip.py
下面要修改一下 pip源:至于为什么要改官方源,我想大家知道.总之换成天朝的源就对了.
需要自己创建配置文件
mkdir .pip
touch pip.conf
vi pip.conf
index-url =http://pypi.mirrors.ustc.edu.cn/simple
当然后面的也可以用其他的,只要是国内的就可以.
安装 Scrapy
下面来安装 Scrapy,在终端输入
sudo pip install Scrapy
出现问题
大家是不是会遇到报错 six-1.4.1已存在,uninstall six 操作被拒绝,导致安装Scrapy失败。是因为Mac OS 的SIP(System Integrity Protection)服务(默认开启)依赖six包,所以系统拒绝卸载six。
问题解决
如果要卸载six,需要先关闭系统的SIP。关闭方法:重启Mac,期间一直按住 command + r 键,直到屏幕出现了苹果的Logo;然后在菜单栏的“实用工具”中选择终端,打开之;在终端中输入
csrutil disable
csrutil status
接下来,正常重启 Mac,手动卸载six:
sudo rm -rf /Library/Python/2.7/site-packages/six*
sudo rm -rf /System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six*
在重新输入安装命令就 OK 了
sudo pip install Scrapy
创建第一个 Scrapy 程序
在开始爬取之前,必须创建一个新的Scrapy项目。 选择一个想要存取信息的目录,运行下列命令:
scrapy startproject tutorial
tutorial,是自己取的名字.成功之后会出现一个已这个名字命名的文件夹.结构如下
tutorial/ //该项目的python模块。之后您将在此加入代码。
scrapy.cfg //项目的配置文件
tutorial/ __init__.py
tems.py //项目中的item文件
pipelines.py
settings.py //项目的设置文件
spiders/ //放置spider代码的目录
__init__.py
...
但是如果失败了,请看这里.....,我遇到的是这个错误
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2' with Python 2.7.11
解决方法
安装zope.interface 4.3.3,下载,
sudo wheel install xxxx.xxxxx.xxxx.whl
zope.interface包安装完成。再次新建 scrapy,成功。如果还不成功,那么点这里github下载之后运行setup.py文件就可以了.再次新建就 ok 了, 如果还不成功,兄弟,去谷歌吧.
回归正题
我们要为提取数据做准备,怎么去提取数据,从网页中提取数据有很多方法。Scrapy使用了一种基于XPath和CSS表达式机制:Scrapy Selectors。Selector有四个基本的方法
xpath(): 传入xpath表达式,返回该表达式所对应的所有节点的selector list列表 。
css(): 传入CSS表达式,返回该表达式所对应的所有节点的selector list列表.
extract(): 序列化该节点为unicode字符串并返回list。
re(): 根据传入的正则表达式对数据进行提取,返回unicode字符串list列表。
为了介绍Selector的使用方法,接下来我们将要使用内置的Scrapy shell。Scrapy Shell需要您预装好IPython(一个扩展的Python终端)。
您需要进入项目的根目录,执行下列命令来启动shell:
scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"
关于 xpath 的学习我在这就不多说了.
编辑 item.py 文件
import scrapy classDmozItem(scrapy.Item): title=scrapy.Field() link=scrapy.Field() desc=scrapy.Field()
这个文件的作用是去对网站的信息的获取,想要什么信息就可以在这里定义好,方便获取.实质上在对一个网页去进行爬去数据的时候,最重要的是清楚自己想要什么,可以利用浏览器去查看源码,分析.这确实是一个比较枯燥的过程.一旦当你成功的那一刻,会有赌神上身的感觉,随便从网站中拿出4个A..
在爬虫文件夹中写入如下代码:
import scrapy
from tutorial.DmozItem import DmozItem
class DmozSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["dmoz.org"]
start_urls = [
"http://www.dmoz.org/Computers/Programming/Languages/Python/Books/",
"http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"
]
def parse(self, response):
for sel in response.xpath('//ul/li'):
item = DmozItem()
item['title'] = sel.xpath('a/text()').extract()
item['link'] = sel.xpath('a/@href').extract()
item['desc'] = sel.xpath('text()').extract()
yield item
然后执行
scrapy crawl dmoz
出现这个就说明成功
[dmoz] DEBUG: Scraped from <200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books>
{'desc': [u' - By David Mertz; Addison Wesley. Book in progress, full text, ASCII format. Asks for feedback. [author website, Gnosis Software, Inc.\n],
'link': [u'http://gnosis.cx/TPiP/'],
'title': [u'Text Processing in Python']}
[dmoz] DEBUG: Scraped from <200 http://www.dmoz.org/Computers/Programming/Languages/Python/Books>
{'desc': [u' - By Sean McGrath; Prentice Hall PTR, 2000, ISBN 0130211192, has CD-ROM. Methods to build XML applications fast, Python tutorial, DOM and SAX, new Pyxie open source XML processing library. [Prentice Hall PTR]\n'],
'link': [u'http://www.informit.com/store/product.aspx?isbn=0130211192'],
'title': [u'XML Processing with Python']}
成功之后在终端上的数据终归不方便我们去分析,最终我们要导出为 Json 或者 XML 的形式.
scrapy crawl dmoz -o items.json
这样就可以查看到我们刚刚爬到的数据了..
总结
学习的道路还很长,革命尚未成功,同志仍然需要努力.我是一个初学者,希望大神指导,一起进步.