-
1 # IT老友
-
2 # Bean蠶豆
python爬蟲一直報錯,不知道是使用框架還是自己利用request寫的。個人的經驗是碰到錯誤,根據錯誤的提示做相應的修改,下面是我在做爬蟲是碰到的幾種錯誤,分享給大家。
提取頁面資料時,數字越界之類的提醒在我們利用xpath提取資料的時候,時常會碰到越界的提示,這裡歸結為一句話是對頁面的html結構瞭解的不夠,對xpath的語法掌握的不夠。比如xpath("./a/text()")和xpath("/a/text()")表達的意思是不一樣的。
頁面的問題,如果只是普通的頁面,你直接用url帶上相應的引數傳送請求,對方伺服器就可以響應我們經常碰到一個爬蟲爬某些頁面的時候正常工作,爬其它的頁面的時候頁面內容爬取不下來,為什麼?因為cookie,出於安全的考慮,現在的頁面都會在本地儲存一些cookie,在使用者下次訪問的時候直接根據cookie來判斷是否需要登入之類的。這個時候,需要我們也偽裝成之前登入過訪問過的樣子,因此,需要在正常的請求基礎上新增上一些頭部資訊之類的。
robots.txt,爬蟲應該注意爬取網站的robots.txt檔案,那些域名是允許爬取的,那些域名下是不允許的在我們利用scrapy等爬蟲框架爬取的時候,要注意這些,預設情況下scrapy是嚴格遵守這些協議的。因此,需要我們在設定檔案裡將此項設定為false,這樣就可以不受robots的約束。
當然,問題不止上面列舉的幾個問題,還有很多其它。總的來說,碰到了問題透過百度搜索都可以幫助我們解決掉,所以碰到問題多搜尋,搜尋後多看,多研究。問題自然 就會解決掉。關鍵是要用心去對待問題。 -
3 # 雲飛學python
爬蟲報錯,有好多可能,從一個新手角度來看,大致有以下幾條:
1、ImportError 匯入模組/物件失敗
這類錯誤往往是在匯入模組的時候報錯,比如匯入失敗或者沒有安裝對應的模組
處理方式:安裝相應的模組,或者檢查語法是否輸入錯誤等等
2、KeyError、NameError、SyntaxError、TabError、ValueError、IndentationError
這類錯誤往往是比較麻煩的,我們來挨個解釋下:
KeyError值錯誤,沒有對應的鍵值,比如取字典中不存在的值的時候,就會出現這個錯誤
NameError變數名錯誤,這個錯誤一般出現在沒有定義或者沒有初始化變數,或者變數名字輸入錯誤
SyntaxError語法錯誤,這個錯誤很明顯就是字面意思了
TabError Tab和空格混用導致的錯誤、IndentationError縮排錯誤
ValueError引數錯誤,傳入的引數值有問題,比如型別錯誤或者其他的
以上錯誤往往是因為寫編碼的時候不夠細緻,或者一些不好的操作習慣導致。出現錯誤後只需要根據後面的提示去修正相應的程式碼即可!
3、AttributeError物件沒有這個屬性、IndexError列表沒有相應的索引
這2個錯誤為什麼單獨拿出來呢,是因為這是新手最常見的錯誤了,比如我們在做一個小爬蟲,用re或者其他方式匹配出結果後,需要對其進行進一步的操作比如分割,往往就忽略了一個問題,匹配出的結果是列表,或者精確的匹配一個內容,也忽略它本身還是一個列表,我們把它當成是一個字串來處理,就會報錯
還有就是如果沒有匹配到相應的內容,會返回空列表,而這種情況有可能發生在程式碼已經寫到後面了,沒有相應的判斷語句去規避,結果就是返回的空列表,去取值,就會報IndexError錯誤了!
當然還有其他的錯誤型別,比如上面幾位所說的,requests沒有返回我們要求的值、因為爬取的過快結果伺服器斷開連線等等,都會發生報錯!
回覆列表
http狀態碼:403,Forbidden。代表伺服器已經理解請求,但是拒絕執行它。通常是被伺服器反爬蟲了。
請用谷歌瀏覽器按f12開啟開發人員工具,然後開啟要爬的網頁,檢查http頭資訊。
1:headers需要偽裝正常的瀏覽器,請檢查各個http頭,比如把host、refer加上,有些網站會檢測;cookie往往是改變的,請測試是否需要加上以及是否合法改變。具體不同網頁不太一樣,原則上就是偽裝headers,以便讓伺服器認為是正常的瀏覽器。
2:如果確認所有的http頭都是正確偽裝,那麼就是請求的頻率太快,被伺服器禁掉了ip或者賬戶,請更換ip或更換代理ip。