python爬蟲——繞開雜亂無章的代碼和堵住請求的302異常(2)


  淘寶那次抓包,居然發現不了要抓的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)
View Code

  這段代碼判定返回狀態,並根據情況決定要不要重傳。(這里應該有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)
View Code

   后來仔細看源碼。。。特碼這個教程只解決了display:none和302的問題,實際的數據還是有毒。。。

  看了下http://www.cnblogs.com/w-y-c-m/p/6879551.html這位兄台的方法,姿勢get到了!不僅知道了如何反混淆,還學會了debug網站


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM