編寫爬蟲遇到的問題總結

2021-07-02 01:12:03 字數 2684 閱讀 6510

1,編碼問題:設定檔案編碼格式utf-8

2.連線超時:異常或者設定timeout

沒有設定timeout引數,結果在網路環境不好的情況下,時常出現read()方法沒有任何反應的問題,程式卡死在read()方法裡,搞了大半天,才找到問題,給urlopen加上timeout就ok了,設定了timeout之後超時之後read超時的時候會丟擲socket.timeout異常,想要程式穩定,還需要給urlopen加上異常處理,再加上出現異常重試,程式就完美了。

import urllib2 url='' fails = 0 while true: try: if fails >= 20: break req = urllib2.request(url) response = urllib2.urlopen(req, none, 3) page = response.read() except: fails += 1 print '網路連線出現問題, 正在嘗試再次請求: ', fails else: break

import urllib2

# r = urllib2.request("

")try:

print 111111111111111111

f = urllib2.urlopen(r, data=none, timeout=3)

print 2222222222222222

result = f.read()

print 333333333333333333

except exception,e:

print "444444444444444444---------" + str(e)

print "55555555555555"

import socket

socket.setdefaulttimeout(10.0)

或者使用:httplib2 or timeout_urllib2

from urllib2 import urlopen

from threading import timer

url = "

"def handler(fh):

fh.close()

fh = urlopen(url)

t = timer(20.0, handler,[fh])

t.start()

data = fh.read() #如果二進位制檔案需要換成二進位制的讀取方式

t.cancel()

我的的的urllib2的的urlopen內。

urllib2.urlopen(' codego.net  timeout=1)
我該如何告訴python,如果到期應提高乙個自定義的錯誤? 任何想法?

1. 有你想要極少數情況下except:。這樣做可以捕獲任何異常,它可以是難以除錯,以及它捕捉異常,包括systemexitkeyboardinterupt,它可以使你的程式煩人 在非常簡單的,你會趕上urllib2.urlerror

try:

urllib2.urlopen(" codego.net timeout = 1)

except urllib2.urlerror, e:

raise myexception("there was an error: %r" % e)

import urllib2

import socket

class myexception(exception):

pass

try:

urllib2.urlopen(" codego.net timeout = 1)

except urllib2.urlerror, e:

# for python 2.6

if isinstance(e.reason, socket.timeout):

raise myexception("there was an error: %r" % e)

else:

# reraise the original error

raise

except socket.timeout, e:

# for python 2.7

raise myexception("there was an error: %r" % e)

2. 在python 2.7.3:

import urllib2

import socket

class myexception(exception):

pass

try:

urllib2.urlopen(" codego.net timeout = 1)

except urllib2.urlerror as e:

print type(e) #not catch

except socket.timeout as e:

print type(e) #catched

raise myexception("there was an error: %r" % e)

3.url解析錯誤

使用異常處理,解析錯誤的url彈出異常,捕獲異常,continue,進行下個url的訪問

爬蟲遇到的問題

特殊字串處理的問題 第一佳大雞排 新街口店 黃燜雞公尺飯 被識別成資料夾名 處理特殊字元 dex0 line 6 find if dex0 1 line 6 line 6 0 dex0 約翰大叔 比薩 龍躍店 輸出時,有特殊字元,無法輸出。處理特殊字元 dex1 line 6 find if dex...

Scrapy 簡單爬蟲中遇到的問題總結

在進行item傳參時總是出現重複資料 在scrapy資料爬取中發現通過以下語句傳遞的引數會出現重複現象,導致爬取的資料出現重複和錯亂的現象。yield scrapy.request item url meta callback self.detail parse 為了解決以上問題,找到 scrapy...

編寫mblock遇到的問題

最近老闆讓我編輯mblock的擴充套件,儘管有乙個pdf教程,但是還是遇到了一點問題在這裡一一列出 1.這個裡面說的大部分都能看懂,先看這個 2.介紹一下pdf裡面我不理解的東西,下面有注釋的,不能直接用的 setup ps2x.config gamepad 13,11,12,10,true,fal...