一只慢慢学会爬的虫子(基于Scrapy)

大家好,我是一只小虫子,下面我来介绍一下我从出生到学会爬的过程.(这是一个心酸的故事),好久好久以前,我在浏览简书的时候看到了"爬",特别的吸引我,所以决定去学习一下大家都是怎么搬到的.于是我找到了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

[global]

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使用了一种基于XPathCSS表达式机制: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

这样就可以查看到我们刚刚爬到的数据了..

总结

学习的道路还很长,革命尚未成功,同志仍然需要努力.我是一个初学者,希望大神指导,一起进步.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容