1. 程式人生 > >Scrapy見面第五天

Scrapy見面第五天

ng- 安裝 調試 class 空間 ext 輸入 img 痛苦

這算是我第一次使用框架吧,說來羞愧。


此前用Request帶上cookie實現、(略微)完好了QQ空間的爬蟲(傳送門),接下來想實現分布式去爬。

事實上僅僅要能實現待爬QQ隊列的共享,分布式的主要問題也就攻克了。可是認為這樣實現的爬蟲項目有點“不正規”,所以想用Scrapy框架和Redis數據庫來整頓現有爬蟲。

無奈公司裏也沒什麽人指點。全憑一人摸爬滾打,過程有點痛苦。但自信僅僅要敢啃。還是能夠拿下的。不成問題。
然後就動手了。


(忽略安裝過程,預計是曾經用其它模塊的時候已經吐血吐夠了,環境都配好了,居然直接用 pip install scrapy 就成功了)

第一步、當然是百度。看看傳說中的“正規軍”是什麽樣子的。高速了解了一下Scrapy工作機制,以及大家在使用scrapy的時候關註的點很多其它在哪裏。然而看的都是似懂非懂,。然而並不重要,我僅僅須要和它碰個面即可。
第二步、搜GitHub。找代碼。搜了十幾個demo,高速看了一下scrapy的代碼結構。
第三步、從各種平臺搜索和Scrapy有關的東西。特別是大家對它的看法。主要途徑:新浪微博、知乎、推酷、Google。


第四步、調試、執行從GitHub上download下來的demo,大約了解scrapy詳細的執行機制。
第五步、是時候靜下心來啃Scrapy的官方文檔了,受益良多。


第六步、糗事百科作靶子,模仿demo實戰練習。再功能延生。
第七步、即現在。第五天。



事實上遇到的問題還是挺多的,基本的原因是對Scrapy了解不夠深入。

想要入門Scrapyeasy,可是想要單槍匹馬高速入門,就非常須要看重怎麽走了


我是想著先實現簡單的Scrapy爬蟲。再用Redis實現分布式。在此之後再進行功能拓展,比如Cookie登錄,比如爬蟲數據的添加,比如異常處理、性能優化等等。整體的思路是先縱向深入,再橫向逐個拓展。

計劃雖是這樣,但終歸還是沒忍住花了一天時間動手實現了一下QQ空間和新浪微博的Scrapy爬蟲。自增苦惱。只是有所收獲。
首先是QQ空間。我之前是用Request的session帶上Cookie去打開js的請求,返回來的是js文件,裏面包括我所須要的信息。

直接請求js文件的優點是數據量小。數據流通和數據處理的花銷會小非常多(反正我的小本本一個小時能抓17萬條說說)。

而現在。我用Scrapy帶上Cookie卻返回403(已帶表頭),我試著打開空間主頁的URL。返回的是HTML文件,這非常正常,沒有JS文件。但為什麽打開JS的請求卻報錯403了呢?這個問題暫先放著。事實上空間更蛋疼的問題還沒解決呢——Cookie。普通的登錄(比如知乎)是發送個表單即可了,但QQ空間的表單。年輕的我沒有找到(預計要一點點調試看它的加密算法了,之前的爬蟲我是用phantomjs模擬瀏覽器獲取到的)。百度和Google也沒有搜到結果。甚至爬QQ空間人就非常少。大夥對它沒興趣?
QQ空間爬不成,我試一下微博。

非常明顯大夥對微博的興趣就高非常多了,已經有加密算法和構造表單的方法了。並且我在查看Cookie的時候看到新浪的Cookie有效期是六天左右(未檢驗)(QQ空間的Cookie有效期在幾十分鐘到十幾個鐘不等)。假設是這種話我們就算手動輸入Cookie那也沒什麽呀。

只是微博另一個問題。JS載入。

網上的說法是構造下載中間件。詳細還有待解決。

只是此時看到scrapy的那張架構圖(例如以下)就第二種感覺了呀。最終對各個部分有一點認識了!只是假設用Redis實現分布式的話Pipeline和Scheduler之間是不是應該要有個數據流通呀?

技術分享

感覺當前的難點很多其它的還是在右半邊。獲取數據。


接下來。構造中間件。

繼續勘探。盡快熟悉Scrapy與分布式!



轉載請註明出處,謝謝!

(原文鏈接:http://blog.csdn.net/bone_ace/article/details/50811004)

Scrapy見面第五天