經檢查發現出現大的問題仍然是dns解析。而我本機測試twitter沒有問題的原因,也是因為其dns未被汙染。開始時facebook正常估計也是因為湊巧當時其並未受到汙染所致。經過搜尋罰下如下方案,經測試工作正常:
至此上文提到的解決django-social-auth的補丁,最終應該是:
def dsa_urlopen(*args, **kwargs):
"""like urllib2.urlopen but sets a timeout defined by
social_auth_urlopen_timeout setting if defined (and not already in
kwargs).
"""timeout = setting('
social_auth_urlopen_timeout')
if timeout and
'timeout
'not
inkwargs:
kwargs[
'timeout
'] =timeout
import
socks
import
socket
socks.setdefaultproxy(socks.proxy_type_socks5,
"127.0.0.1
", 1080)
socket.socket =socks.socksocket
def _create_connection(address, timeout=socket._global_default_timeout,source_address=none):
msg = "
getaddrinfo returns an empty list
"host, port =address
if len(address) == 2 and isinstance(address,(list,tuple)) and
isinstance(address[0],unicode):
address = (str(address[0]),address[1])
for res in
socket.getaddrinfo(host, port, 0, socket.sock_stream):
af, socktype, proto, canonname, sa =res
sock =none
try:
sock =socket.socket(af, socktype, proto)
if timeout is
notsocket._global_default_timeout:
sock.settimeout(timeout)
sock.connect(address)
return
sock
except
socket.error, msg:
if sock is
notnone:
sock.close()
raise
socket.error, msg
socket.create_connection =_create_connection
#magic!
def getaddrinfo(*args):
return [(socket.af_inet, socket.sock_stream, 6, '', (args[0], args[1]))]
socket.getaddrinfo =getaddrinfo
return urlopen(*args, **kwargs)
urllib2的異常處理
異常處理 作為爬蟲的抓取過程基本就那麼多內容了,後面再將一些正規表示式的東西簡單介紹一下基本就完事了,下面先說說異常處理的方法。先介紹一下抓取過程中的主要異常,如urlerror和httperror。urlerror可能產生的原因主要有 網路無連線,即本機無法上網 連線不到特定的伺服器 伺服器不存在...
爬蟲 urllib2庫的使用
所謂網頁抓取,就是把url位址中指定的網路資源從網路流中讀取出來,儲存到本地。在python中有很多庫可以用來抓取網頁,我們先學習urllib2。urllib2 官方文件 urllib2 原始碼 urllib2在 python3.x 中被改為urllib.request 我們先來段 urllib2 ...
python中urllib2的學習
get方法 通常用於請求伺服器傳送某個資源,而且應該是安全的和冪等的。post方法 向伺服器提交資料,比如完成表單資料的提交,將資料提交給伺服器處理 get和post方法的區別 urlopen url,data none,timeout 傳遞乙個url引數,新增post需要的data,返回值是乙個類...