為什麼scrapy沒法爬中紀委網站?
來源:互聯網
上載者:User
回複內容:
無論是什麼裝置,第一次訪問該站,都會彈出一個521的錯誤狀態代碼,與此同時還會返回一個Cookie。無論是什麼裝置,第一次訪問該站,都會彈出一個521的錯誤狀態代碼,與此同時還會返回一個Cookie。
瀏覽器接受到狀態代碼與Cookie,會再次進行一次請求,因為接收到了Set-Cookie,所以第二次的Request Headers會附上之前接收到的Cookie。
這樣的請求才是成功的。這樣的請求才是成功的。
這個防爬蟲的方法非常基礎,利用了普通爬蟲與瀏覽器對於Status Code的處理方式不同。
你要爬取,只需要先請求一次,獲得一個Cookie並儲存,然後之後所有的請求都附上這個儲存下來的Cookie,這樣就行了。
爬蟲的要訣在於:儘力模仿使用者使用瀏覽器的行為。想了一會兒要不要回答,因為題目被貼上了作死標籤……╭(°A°`)╮
---------------------------------------------------------------
Chrome大法好,Python大法好。
@林燦斌 說的方法沒錯,不過一般這種網站的Cookie生效時間都比較長,所以你直接複製你Request Headers中的Cookie值,放到你類比post請求的包中就可以了。你自己在瀏覽器裡開啟該網址,然後查看Request Headers中的內容。針對各種反抓取機制,主要有以下幾種:
1、Cookie:這個不用多說,你把你的Cookie記下來就好,還可以解決一串需要類比登陸才能抓取的網站,比如微博之類的;
2、Host:這個不用多說,帶上就好,不會變;
3、Referer:有些網站比較變態不僅會檢查你是否帶Referer資訊還會
檢查你的Referer是否合法,這兒就不點名了,怕被查水表;
4、User-Agent:這裡面就是你使用者使用環境的一些資訊,如瀏覽器和作業系統,儘可能帶上。最好是自己有一個UA表,
每次構造請求的時候,隨機採用一條UA資訊。
除此之外,最重要的就是在IP上下工夫。
1、偽造X-forwarded-for頭:這是最容易偽造IP的一個方法,當然也最容易被識破;
2、使用TCP包注入:這個方法被Scrapy封裝起來了,具體可以查相關文檔,比如還可以藉此實現偽造IP源進行SYN FLOOD拒絕服務的攻擊(好像走偏了……);
3、使用代理IP池:這是最靠譜的做法,缺點就是代理IP的品質常常參差不齊,所以還需要寫一個指令碼來維護這個代理IP池,比如要擷取新的代理IP以及剔除庫中無效的IP(我一般就挨個拿來嘗試能否訪問百度)。
如果你抓取的內容是通過AJAX獲得的,那麼你的任務就是找到那條JS發出去的請求,按以上套路類比之即可。祭出神器
http://jeanphix.me/Ghost.py/
爬蟲是蛀蟲,害怕中紀委,不敢爬中紀委的網站。這種頁數不太多的建議自己寫爬蟲,比直接用scrapy靈活性強一些。這種內容並不是很多的頁面用bs4/re+requests+gevent/threading已經可以隨意抓了,我始終覺得爬蟲難在爬下來的東西要怎麼處理。
不知道頁面是怎麼跳的時候祭出神器Wireshark。