1. 程式人生 > >python+rabbitMQ抓取某婚戀網站用戶數據

python+rabbitMQ抓取某婚戀網站用戶數據

arm art header 留言 ima 數據轉換 公司 頁面 進行

“總是向你索取卻不曾說謝謝你~~~~”,在博客園和知乎上面吸收了很多知識,以後也會在這裏成長,這裏挺好,謝謝博客園和知乎,所以今天也把自己在項目期間做的東西分享一下,希望對朋友們有所幫助。。。。

廢話少說,let‘s go~~~~!

需求:

項目需要做一個婚戀網站,主要技術有nginx,服務器集群,redis緩存,mysql主從復制,amoeba讀寫分離等等,我主要用rabbitMQ+python完成並實現了數據爬取工作(數據庫寫入及圖片下載保存),速度的話公司的電腦爬的(i5+16g&網站需要驗證登錄),網速給力的話應該可以更快些(我公司的網,我也就不多評價了·······^_^),親測爬“~車之家”的二手車數據,一個小時15-20W(無登陸,無反扒)。

1.爬蟲前你需要了解的:

1)網頁的結構:

a.你知道嗎,爬這個網站能讓你惡心,字段極多,並且男生的頁面和女生的頁面結夠還不一樣,所以男女數據所在網頁裏面的位置也就不一樣,標簽屬性也有不同的地方,所以,我是用 if分開男女去分別爬取的,中間也包含一些數據轉換和拆分處理,也有一 些小坑,我在下面的代碼裏會說

b.網站有反扒技術,之前寫了一個爬蟲,請求,解析,存取都在一個文件中,當請求過快時會被服務器遠程強制斷掉,解決的辦法是使用代理ip和更換UserAgent,但是有一個bug就是代理爬取的代理ip的可用度極低,導致速度極慢,後來就果斷註掉了,發現 是ok的,他的反爬機制沒有弄的太明白.

c.模擬登陸:嚴格說不能算模擬,解決的辦法是手動在網頁登陸之後,然後把去瀏覽器中把cookie抓出來,放到headers裏面,請求的時候帶上cookie,這樣就能請求到登陸之後才能抓到的數據了。

d.分析網頁,用戶的詳情頁是跟隨id在改變的,所以爬取的邏輯是用一個for循環id+請求的連接,還能天然的去重,中間有時會出現未知的錯誤斷掉,大家可以自己在for外面捕獲一個異常,然後整個代碼裝在一個def裏,用遞歸實現一直循環

2)在linux中配置rabbitMQ可以參見我的另外一篇文章:http://www.cnblogs.com/devinCat/articles/7172927.html

3)開發工具:pycharm+python3.6

2.簡單的說下MQ在這個任務中的作用:將一個任務縱向拆分成若幹塊,每一塊之間以消息隊列為介質進行連接並傳送需要的信息,這樣讓執行不同任務邏輯的的代碼可以並行工作,互不影響並且能提高程序運行的效率,消息隊列有六個工作模式,這裏用到的是work模式,建議百度了解原理,在此不過多闡述。下面我自己畫了一張圖助於大家理解代碼的實現邏輯和過程,希望能幫到大家!(大一點看得比較清楚)

技術分享

代碼放在GitHub裏,本人小白,希望大神們多多指點:https://github.com/DevinCat/Cat

技術分享

後續會把多線程也加進去,不斷地優化和改進,雖然辛苦,實現之後還是有一種那叫什麽感來著^?_?^,望大家多多指點,歡迎留言交流·····!

python+rabbitMQ抓取某婚戀網站用戶數據