一只慢慢學(xué)會爬的蟲子(基于Scrapy)

大家好,我是一只小蟲子,下面我來介紹一下我從出生到學(xué)會爬的過程.(這是一個心酸的故事),好久好久以前,我在瀏覽簡書的時(shí)候看到了"爬",特別的吸引我,所以決定去學(xué)習(xí)一下大家都是怎么搬到的.于是我找到了python ,它看我骨骼驚奇,就給了我一個秘籍Scrapy,那么下面我們來一起看看這本秘籍吧.


Python

mac下python是2.7版本.python3和2.7是有一定的區(qū)別的,本秘籍是2.7版本的.剛開始學(xué)習(xí) python 也是借鑒了廖雪峰老師的課堂傳送門,

Scrapy

Scrapy在 python2.7上是比較穩(wěn)定的,利用 Homebrew和wget來安裝.傳送門

安裝pip工具

pip是基于python的管理工具包,話不多說,打開終端

wget https://bootstrap.pypa.io/get-pip.py

sudo python?get-pip.py

下面要修改一下 pip源:至于為什么要改官方源,我想大家知道.總之換成天朝的源就對了.

需要自己創(chuàng)建配置文件

mkdir .pip

touch pip.conf

vi pip.conf

[global]

index-url =http://pypi.mirrors.ustc.edu.cn/simple

當(dāng)然后面的也可以用其他的,只要是國內(nèi)的就可以.

安裝 Scrapy

下面來安裝 Scrapy,在終端輸入

sudo pip install Scrapy

出現(xiàn)問題

大家是不是會遇到報(bào)錯 six-1.4.1已存在鸵闪,uninstall six 操作被拒絕岖赋,導(dǎo)致安裝Scrapy失敗。是因?yàn)镸ac OS 的SIP(System Integrity Protection)服務(wù)(默認(rèn)開啟)依賴six包养晋,所以系統(tǒng)拒絕卸載six列另。

問題解決

如果要卸載six,需要先關(guān)閉系統(tǒng)的SIP。關(guān)閉方法:重啟Mac植锉,期間一直按住 command + r 鍵,直到屏幕出現(xiàn)了蘋果的Logo峭拘;然后在菜單欄的“實(shí)用工具”中選擇終端俊庇,打開之;在終端中輸入

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

創(chuàng)建第一個 Scrapy 程序

在開始爬取之前暇赤,必須創(chuàng)建一個新的Scrapy項(xiàng)目。 選擇一個想要存取信息的目錄宵凌,運(yùn)行下列命令:

scrapy startproject tutorial

tutorial,是自己取的名字.成功之后會出現(xiàn)一個已這個名字命名的文件夾.結(jié)構(gòu)如下

tutorial/? ? //該項(xiàng)目的python模塊鞋囊。之后您將在此加入代碼。

scrapy.cfg? //項(xiàng)目的配置文件

? ? ? ? ? tutorial/ __init__.py

? ? ? ? ? ? ? ? ? ? ? tems.py ?//項(xiàng)目中的item文件

? ? ? ? ? ? ? ? ? ? ? ?pipelines.py

? ? ? ? ? ? ? ? ? ? ? settings.py? //項(xiàng)目的設(shè)置文件

? ? ? ? ? ? ? ? ? ? ? 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溜腐,成功译株。如果還不成功,那么點(diǎn)這里github下載之后運(yùn)行setup.py文件就可以了.再次新建就 ok 了, 如果還不成功,兄弟,去谷歌吧.

回歸正題

我們要為提取數(shù)據(jù)做準(zhǔn)備,怎么去提取數(shù)據(jù),從網(wǎng)頁中提取數(shù)據(jù)有很多方法。Scrapy使用了一種基于XPathCSS表達(dá)式機(jī)制:Scrapy Selectors挺益。Selector有四個基本的方法

xpath(): 傳入xpath表達(dá)式歉糜,返回該表達(dá)式所對應(yīng)的所有節(jié)點(diǎn)的selector list列表 。

css(): 傳入CSS表達(dá)式望众,返回該表達(dá)式所對應(yīng)的所有節(jié)點(diǎn)的selector list列表.

extract(): 序列化該節(jié)點(diǎn)為unicode字符串并返回list匪补。

re(): 根據(jù)傳入的正則表達(dá)式對數(shù)據(jù)進(jìn)行提取,返回unicode字符串list列表烂翰。

為了介紹Selector的使用方法夯缺,接下來我們將要使用內(nèi)置的Scrapy shell。Scrapy Shell需要您預(yù)裝好IPython(一個擴(kuò)展的Python終端)甘耿。

您需要進(jìn)入項(xiàng)目的根目錄踊兜,執(zhí)行下列命令來啟動shell:

scrapy shell "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/"

關(guān)于 xpath 的學(xué)習(xí)我在這就不多說了.

編輯 item.py 文件

import scrapy ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? classDmozItem(scrapy.Item): ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? title=scrapy.Field() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? link=scrapy.Field() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? desc=scrapy.Field()

這個文件的作用是去對網(wǎng)站的信息的獲取,想要什么信息就可以在這里定義好,方便獲取.實(shí)質(zhì)上在對一個網(wǎng)頁去進(jìn)行爬去數(shù)據(jù)的時(shí)候,最重要的是清楚自己想要什么,可以利用瀏覽器去查看源碼,分析.這確實(shí)是一個比較枯燥的過程.一旦當(dāng)你成功的那一刻,會有賭神上身的感覺,隨便從網(wǎng)站中拿出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

然后執(zhí)行

scrapy crawl dmoz

出現(xiàn)這個就說明成功

[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']}

成功之后在終端上的數(shù)據(jù)終歸不方便我們?nèi)シ治?最終我們要導(dǎo)出為 Json 或者 XML 的形式.

scrapy crawl dmoz -o items.json

這樣就可以查看到我們剛剛爬到的數(shù)據(jù)了..

總結(jié)

學(xué)習(xí)的道路還很長,革命尚未成功,同志仍然需要努力.我是一個初學(xué)者,希望大神指導(dǎo),一起進(jìn)步.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市佳恬,隨后出現(xiàn)的幾起案子捏境,更是在濱河造成了極大的恐慌,老刑警劉巖毁葱,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垫言,死亡現(xiàn)場離奇詭異,居然都是意外死亡头谜,警方通過查閱死者的電腦和手機(jī)骏掀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柱告,“玉大人截驮,你說我怎么就攤上這事〖识龋” “怎么了葵袭?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乖菱。 經(jīng)常有香客問我坡锡,道長,這世上最難降的妖魔是什么窒所? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任鹉勒,我火速辦了婚禮,結(jié)果婚禮上吵取,老公的妹妹穿的比我還像新娘禽额。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布脯倒。 她就那樣靜靜地躺著实辑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藻丢。 梳的紋絲不亂的頭發(fā)上剪撬,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天,我揣著相機(jī)與錄音悠反,去河邊找鬼残黑。 笑死,一個胖子當(dāng)著我的面吹牛问慎,可吹牛的內(nèi)容都是我干的萍摊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼如叼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了穷劈?” 一聲冷哼從身側(cè)響起笼恰,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歇终,沒想到半個月后社证,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡评凝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年追葡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奕短。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡宜肉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翎碑,到底是詐尸還是另有隱情谬返,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布日杈,位于F島的核電站遣铝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏莉擒。R本人自食惡果不足惜酿炸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望涨冀。 院中可真熱鬧填硕,春花似錦、人聲如沸蝇裤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恋拍,卻和暖如春垛孔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背施敢。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工周荐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人僵娃。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓概作,卻偏偏與公主長得像,于是被迫代替她去往敵國和親默怨。 傳聞我的和親對象是個殘疾皇子讯榕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容