淘寶那次抓包,居然發現不了要抓的url位置,三星中。。。
不過不怕,不就是沒法快點分析出包嘛,下次用phantomJS硬杠,或者有時間慢慢分析也好。
今天挑戰一個稍微好爬的網站:狗搬家(誤)
打開后台代碼一看,山口山
一堆<p style="display:none;">直接影響分析數據。
有個運用無頭瀏覽器的爬蟲使用了圖像分析法,不過老夫真心認為這玩意還是不要隨便用比較好,就像一些簡單的網站不要用phantomJS一樣
稍微分析ip那里的代碼就可以找到解的(避免查水表不發布源代碼)去除html標簽,連着里面的元素去除什么的,用regex還是比較簡單的
結果想再爬這個網頁時,出現了302重定向
這里,直接ban掉重定向沒有多大用,關鍵是識別到狀態再根據情況重新請求。
從stackoverflow一哥們那里搞來了這段代碼:

self.log("(parse_page) response: status=%d, URL=%s" % (response.status, response.url)) if response.status in (302,) and 'Location' in response.headers: self.log("(parse_page) Location header: %r" % response.headers['Location']) yield Request(response.headers['Location'],callback=self.parse,meta=self.meta)
這段代碼判定返回狀態,並根據情況決定要不要重傳。(這里應該有urljoin的,不知為何我安裝的scrapy沒有)
結果是yield后面的代碼沒有運行就退出了。
還是一樣去stackoverflow求助,結果有人告訴我,ban了filter。
dont_filter這個參數開始是為了防止程序死循環設計的,然鵝在這個框架就成了問題,它不能yield第二層request
初始化request時,dont_filter=true,程序就會不管3721把請求提交,然后數據就返回了
幸好這里的302不會一直302,只要cookies對上了,返回的就是200和網頁代碼,不會出現棧溢出

self.log("(parse_page) response: status=%d, URL=%s" % (response.status, response.url)) if response.status in (302,) and 'Location' in response.headers: self.log("(parse_page) Location header: %r" % response.headers['Location']) yield Request(response.headers['Location'],callback=self.parse,meta=self.meta,dont_filter=True)
后來仔細看源碼。。。特碼這個教程只解決了display:none和302的問題,實際的數據還是有毒。。。
看了下http://www.cnblogs.com/w-y-c-m/p/6879551.html這位兄台的方法,姿勢get到了!不僅知道了如何反混淆,還學會了debug網站