零Python基礎(chǔ)scrapy爬蟲(chóng)踩坑記

因?yàn)橄胍@取一些關(guān)于古詩(shī)詞的數(shù)據(jù)曲梗,但并沒(méi)有找到滿(mǎn)意的數(shù)據(jù)庫(kù)文件哮缺,所以就想通過(guò)爬蟲(chóng)來(lái)獲取弄跌,十分苦悶的是,對(duì)于Python爬蟲(chóng)尝苇,之前從來(lái)沒(méi)有接觸過(guò)铛只,還好在git上找到了代碼:GushiwenSpider 埠胖,感激之情無(wú)以言表,然而尷尬的是淳玩,源碼就在手上直撤,愣是運(yùn)行的一塌糊涂。

為了做現(xiàn)在的項(xiàng)目蜕着,所以電腦里有Python2.7谋竖,就沒(méi)有安裝最新版,先是安裝了pip承匣,修改了環(huán)境變量蓖乘,項(xiàng)目以scrapy開(kāi)源框架,所以需要安裝scrapy韧骗。

但實(shí)際情況是驱敲,并不能自動(dòng)下載所需要的whl文件,所以在下載某個(gè)包出錯(cuò)的時(shí)候宽闲,可以用一個(gè)非常有用的網(wǎng)址:Unofficial Windows Binaries for Python Extension Packages

把需要的whl文件手動(dòng)下載安裝众眨。

部署好后做一下測(cè)驗(yàn):scrapy shell .......

scrapy測(cè)試

項(xiàng)目里面還用到了scrapy_redis,scrapy-redis的原理是巧妙的利用redis隊(duì)列容诬,實(shí)現(xiàn) request queue和 items queue娩梨,利用redis的 set實(shí)現(xiàn)request的去重,將scrapy從單臺(tái)機(jī)器擴(kuò)展多臺(tái)機(jī)器览徒,實(shí)現(xiàn)較大規(guī)模的爬蟲(chóng)集群狈定。

安裝Redis,然后切換目錄到C:\redis運(yùn)行

redis-server.exe redis.windows.conf

運(yùn)行redis

這時(shí)候另啟一個(gè)cmd窗口习蓬,原來(lái)的不要關(guān)閉纽什,不然就無(wú)法訪(fǎng)問(wèn)服務(wù)端了。

切換到redis目錄下運(yùn)行redis-cli.exe -h 127.0.0.1 -p 6379躲叼。

測(cè)試:

設(shè)置鍵值對(duì)set myKey abc

取出鍵值對(duì)get myKey

測(cè)試redis

用scrapy crawl ......? 啟動(dòng)項(xiàng)目

用scrapy check檢測(cè)爬蟲(chóng)是否正常

運(yùn)行

然而也不知道是因?yàn)榕老x(chóng)項(xiàng)目運(yùn)行的不正確還是redis不正確芦缰,其他幾個(gè)爬蟲(chóng)文件并不能爬到數(shù)據(jù),于是進(jìn)度開(kāi)始停滯不前枫慷。

在網(wǎng)上找了關(guān)于爬蟲(chóng)的視頻教程让蕾,準(zhǔn)備學(xué)習(xí)一下原理:

手頭并沒(méi)有其他的爬蟲(chóng)項(xiàng)目,于是就拿這個(gè)古詩(shī)詞的爬蟲(chóng)項(xiàng)目解析了或听,望編寫(xiě)這個(gè)項(xiàng)目的大佬見(jiàn)諒探孝,再次表達(dá)感激之情。

items.py是項(xiàng)目的目標(biāo)文件

Item是保存爬取到的數(shù)據(jù)的容器誉裆;其使用方法和python字典類(lèi)似顿颅, 并且提供了額外保護(hù)機(jī)制來(lái)避免拼寫(xiě)錯(cuò)誤導(dǎo)致的未定義字段錯(cuò)誤。

item.py

pipelines.py是項(xiàng)目的管道文件

管道文件:

當(dāng)Item在Spider中被收集之后足丢,它將會(huì)被傳遞到Item Pipeline粱腻,一些組件會(huì)按照一定的順序執(zhí)行對(duì)Item的處理绍填。

每個(gè)item pipeline組件(有時(shí)稱(chēng)之為“Item Pipeline”)是實(shí)現(xiàn)了簡(jiǎn)單方法的Python類(lèi)。他們接收到Item并通過(guò)它執(zhí)行一些行為栖疑,同時(shí)也決定此Item是否繼續(xù)通過(guò)pipeline讨永,或是被丟棄而不再進(jìn)行處理。以下是item pipeline的一些典型應(yīng)用:

1.驗(yàn)證爬取的數(shù)據(jù)(檢查item包含某些字段)遇革,如果有做相應(yīng)處理

2.查重(并丟棄)卿闹,在init方法里創(chuàng)建一個(gè)集合,每個(gè)數(shù)據(jù)存到集合里面萝快,如果集合里有這個(gè)數(shù)據(jù)就可以不往里面寫(xiě)了锻霎,管道就是一個(gè)個(gè)接收item的,所以可以做去重處理揪漩,url請(qǐng)求去重是在調(diào)度器實(shí)現(xiàn)旋恼,數(shù)據(jù)去重在管道實(shí)現(xiàn)。

3.將爬取結(jié)果保存到數(shù)據(jù)庫(kù)中

pipelines.py

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

settings.py(1)


settings.py(2)


官網(wǎng)教程管道實(shí)例


Rules的一些說(shuō)明:

rules: 是Rule對(duì)象的集合奄容,用于匹配目標(biāo)網(wǎng)站并排除干擾

parse_start_url: 用于爬取起始響應(yīng)冰更,必須要返回ItemRequest中的一個(gè)昂勒。

因?yàn)?i>rules是Rule對(duì)象的集合蜀细,所以這里也要介紹一下Rule。它有幾個(gè)參數(shù):link_extractor戈盈、callback=None奠衔、cb_kwargs=Nonefollow=None塘娶、process_links=None归斤、process_request=None

其中的link_extractor既可以自己定義,也可以使用已有LinkExtractor類(lèi)刁岸,主要參數(shù)為:

allow:滿(mǎn)足括號(hào)中“正則表達(dá)式”的值會(huì)被提取脏里,如果為空,則全部匹配难捌。

deny:與這個(gè)正則表達(dá)式(或正則表達(dá)式列表)不匹配的URL一定不提取膝宁。

allow_domains:會(huì)被提取的鏈接的domains。

deny_domains:一定不會(huì)被提取鏈接的domains根吁。

restrict_xpaths:使用xpath表達(dá)式,和allow共同作用過(guò)濾鏈接合蔽。還有一個(gè)類(lèi)似的restrict_css



Item Loader一些補(bǔ)充:

Item Loaders提供了一種便捷的方式填充抓取到的 Items 击敌。從另一方面來(lái)說(shuō), Items 提供保存抓取數(shù)據(jù)的容器拴事, 而 Item Loaders提供的是填充容器的機(jī)制沃斤。

要使用Item Loader, 你必須先將它實(shí)例化. 可以使用類(lèi)似字典的對(duì)象來(lái)進(jìn)行實(shí)例化, 或者不使用對(duì)象也可以, 當(dāng)不用對(duì)象進(jìn)行實(shí)例化的時(shí)候,Item會(huì)自動(dòng)使用 ItemLoader.default_item_class 屬性中指定的Item 類(lèi)在Item Loader constructor中實(shí)例化.



add_xpath

name 字段被從頁(yè)面中兩個(gè)不同的XPath位置提取:

1.//div[@class="product_name"]

2.//div[@class="product_title"]

換言之,數(shù)據(jù)通過(guò)用add_xpath()的方法,把從兩個(gè)不同的XPath位置提取的數(shù)據(jù)收集起來(lái). 這是將在以后分配給name字段中的數(shù)據(jù)?


最終, 當(dāng)所有數(shù)據(jù)被收集起來(lái)之后, 調(diào)用ItemLoader.load_item()方法, 實(shí)際上填充并且返回了之前通過(guò)調(diào)用add_xpath(),add_css(),and add_value()所提取和收集到的數(shù)據(jù)的Item.



直到剛才圣蝎,我終于找出了我運(yùn)行不出結(jié)果的原因,這半個(gè)月以來(lái)衡瓶,我一直以為徘公,項(xiàng)目里給的數(shù)據(jù)庫(kù)表結(jié)構(gòu)長(zhǎng)成如下的樣子:

這使我百思不得其解,然而我只是覺(jué)得其中的玄妙并不是我等凡人所能領(lǐng)會(huì)的哮针,照做就可以了关面,一直覺(jué)得是運(yùn)行不出是代碼的某部分可能與Windows或Python2.7不兼容之類(lèi)的導(dǎo)致,直到剛才某一剎那十厢,我把excel的下拉框向上移了一下......原來(lái)與這個(gè)代碼不兼容的等太,是我的智商。

參考:

[Python]MySQLdb for Python使用指南/Python的數(shù)據(jù)庫(kù)操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛮放,一起剝皮案震驚了整個(gè)濱河市缩抡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌包颁,老刑警劉巖瞻想,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異娩嚼,居然都是意外死亡内边,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)待锈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)漠其,“玉大人,你說(shuō)我怎么就攤上這事竿音『褪海” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵春瞬,是天一觀(guān)的道長(zhǎng)柴信。 經(jīng)常有香客問(wèn)我,道長(zhǎng)宽气,這世上最難降的妖魔是什么随常? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮萄涯,結(jié)果婚禮上绪氛,老公的妹妹穿的比我還像新娘。我一直安慰自己涝影,他們只是感情好枣察,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般序目。 火紅的嫁衣襯著肌膚如雪臂痕。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天猿涨,我揣著相機(jī)與錄音握童,去河邊找鬼。 笑死叛赚,一個(gè)胖子當(dāng)著我的面吹牛澡绩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播红伦,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼英古,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了昙读?” 一聲冷哼從身側(cè)響起召调,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛮浑,沒(méi)想到半個(gè)月后唠叛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沮稚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年艺沼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蕴掏。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡障般,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盛杰,到底是詐尸還是另有隱情挽荡,我是刑警寧澤,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布即供,位于F島的核電站定拟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逗嫡。R本人自食惡果不足惜青自,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驱证。 院中可真熱鬧延窜,春花似錦、人聲如沸雷滚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)祈远。三九已至呆万,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間车份,已是汗流浹背谋减。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扫沼,地道東北人出爹。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缎除,于是被迫代替她去往敵國(guó)和親严就。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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