美文网首页程序员@IT·互联网
一只慢慢学会爬的虫子(基于Scrapy)

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

作者: 一天清晨 | 来源:发表于2017-03-09 15:38 被阅读346次

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

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

总结

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

相关文章

网友评论

    本文标题:一只慢慢学会爬的虫子(基于Scrapy)

    本文链接:https://www.haomeiwen.com/subject/glbwgttx.html