爬虫实习小结
這兩天找了個實習,名義是python工程師,其實就是寫爬蟲+整合到django。實習很奇葩,還有試用期的,現在試用期過了等后續安排,正好整理下這幾天寫爬蟲的一些心得體會。
首先,感覺寫爬蟲真的是個經驗活,一般的網站說白了就是不停往request里試參數。直接爬不行加headers=試試,看有提交的表單就加個data=試試。這里要區分下的是POST方法對應的是Form Data,可以通過request的data參數實現
request.post(data=data)而GET方法對應的是Query String Parameters,一般采用拼接url的方法
base_url+urllib.urlencode(data)至于提交表單的內容是什么,就要靠自己看html的標簽或者js的函數得知,一般來說都能在html的源碼里搜索到,可能是商品id,可能是頁面相對路徑的一部分,可能和時間相關,當然那些反爬網站提交的表單都是加密的,要想真正破解就要靠猜和試了。
然后對于一些需要模擬登錄的網站,不需要驗證碼的話利用上面說的GET和POST表單應該就能解決,但有的網站還需要提供cookies,這時request就要包含cookies參數了。
requests.get(url, headers=header, cookies=cookie_dict)而對于一些需要驗證碼登錄的網站,也可以考慮先登錄進去,然后復制下來登陸后的cookies,再利用其模仿登陸后的狀態,但這招不一定總能成功。
說到這里突然想起之前爬學校能源網站查電費時,它一個非登錄功能居然也要提供cookies才能成功響應,不知道是不是和框架有關,但總覺得好多此一舉...
最后想說,之前碰到爬不動的網站,就想用phantomjs+selenium,因為感覺理論上沒有這個方法爬不了的網站,但在實習時候就遇到了不行的情況,現在也沒搞懂為什么。不過拋開個案不談,phantomjs雖然好用,可現在越發覺得用它就和作弊一樣,因為它就是個瀏覽器啊!個人用來爬少量數據還好,如果要爬商業用的大量數據request才是正道,畢竟用phantomjs比你直接用瀏覽器的效率都高不出哪里去。
總之無論是headers,data還是cookies,爬蟲的精髓就是要盡可能的模仿真實瀏覽器的登錄過程(知乎live 董偉明大大講的),但抓到的包里有那么多參數,完全加進去不可能也沒必要。至于具體使用哪些參數才能奏效,真的就要靠經驗了。據說有那種層層迭代的反爬方法?上一個接受包含下一個請求的參數,但這種連環套路我還沒有正是爬成功過,所以也不敢斷言。
最后好想吐槽下這個實習,糟糕的老板(半懂不懂態度惡劣還固執僵硬),年幼的開發團隊(真正在做事的就兩個學生,一個異地的組長,一個半吊子的我...),混亂的代碼管理(開發人員都是實習學生,更迭頻繁,導致代碼風格迥異,可讀性健全性模塊化都好差)。別說公司給不給留任,我自己都不想做了,但一想這是珍貴的第一份IT實習啊,就有不想放棄,哎呀,好煩。
總結
- 上一篇: JAVA 工厂模式计算器
- 下一篇: Win11局域网内安装IIS