⑴ python程序問題:urlopen()控制
使用try...except來對urlopen出錯進行控制,通過socket模塊的setdefaulttimeout函數來控制超時時間,python3.x示例代碼如下:
importurllib.request
importsocket
socket.setdefaulttimeout(10)#設置超時時間
#要下載的網頁列表
urls=['http://www.test.com/1.htm',
'http://www.test.com/2.htm',
'http://www.test.com/3.htm',
'http://www.test.com/4.htm',
'http://www.test.com/5.htm',
'http://www.test.com/6.htm']
forurlinurls:
try:
html=urllib.request.urlopen(url)
#處理得到的網頁
except:
#出錯處理
⑵ 如何用python把網頁上的文本內容保存下來
1、了解Python如何獲取網頁內容。
⑶ python 2.7 urlopen 函數,如何提高下載速度.
可以使用多進程或多線程並發下載。其實你的方法已經是多進程的一種了。
python中有多進程模塊multiprocessing和多線程multithreading。
思路是這樣,將需要下載的連接送入隊列,然後各個進程(或線程)從隊列里拿任務然後下載。前面的兩個類庫都提供進程、線程安全的隊列。
樓下給了個多線程的示例,這里我給一個稍微復雜點的進程的示例。其實線程和進程庫的介面基本是一致的。
#!/usr/bin/envpython
#encoding=utf-8
#test.py
,Process
fromQueueimportEmpty
importurllib
importtime
urls=[line.strip()forlineinopen('urls.txt')]
queue=Queue(1024)
forurlinurls:
queue.put(url)
defdownload():
whileTrue:
try:
url=queue.get()
f=urllib.urlopen(url)
r=f.read()
#這里保存你下載的文件
exceptEmpty:
time.sleep(5)
exceptException,e:
print'downloaderror:%s'%e
foriinrange(10):
p=Process(target=download)
p.start()
p.join()
使用方法:編輯一個文件urls.txt,每行一個url。然後:
nohup./test.py&
結束進程則需要找到它的進程號,然後kill -9
望採納,謝謝支持!
⑷ python3中使用urllib進行https請求
剛入門python學習網路爬蟲基礎,我使用的python版本是python3.6.4,學習的教程參考 Python爬蟲入門教程
python3.6的版本已經沒有urllib2這個庫了,所以我也不需要糾空帶結urllib和urllib2的區別和應用場景
參考這篇官方文檔 HOWTO Fetch Internet Resources Using The urllib Package 。關於http(s)請求一般就get和post兩種方式較為常用衡並,所以寫了以下兩個小demo,url鏈接隨便找的,具體場景具體變化,可參考注釋中的基本思路
POST請求:
GET請求:
注意,
使用ssl創建未經驗證的上下文,在urlopen中需傳入上下文參數
urllib.request.urlopen(full_url, context=context)
這是Python 升級到 2.7.9 之後引入的一個新特性,所以在使用urlopen打開https鏈接會遇到如下報錯:
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:777)
所以,當使用urllib.urlopen打開一個 https 鏈接時,需要先驗證一次 SSL 證書
context = ssl._create_unverified_context()
或者或者導入ssl時關閉斗攔蘆證書驗證
ssl._create_default_https_context =ssl._create_unverified_context
⑸ 如何用python的urlopen打開自動跳轉的網頁
try this:
import sys,re,urllib2,cookielib
def download(url):
____opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
____opener.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322)')]
____f = opener.open(url)
____s = f.read()
____f.close()
____return s
s = download("http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2009-2403")
print s
⑹ 關於python的urlopen
python 3裡面,bytes存放的是binary data,而str存放的text
從bytes轉到str,需要把binary data解碼,因此你需要指定一個編碼,例如:
my_str = str(my_bytes, encoding="utf-8")
建議閱讀文檔:
http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
http://docs.python.org/release/3.0.1/howto/unicode.html#unicode-howto
這兩段文檔應該足夠解決你的困惑,呵呵
⑺ 關於python urlopen函數
python
3裡面,bytes存放的是binary
data,而str存放的text
從bytes轉到str,需要把binary
data解碼,因此你需要指定一個編碼,例如:
my_str
=
str(my_bytes,
encoding="utf-8")
建議閱讀文檔:
http://docs.python.org/release/3.0.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8-bit
http://docs.python.org/release/3.0.1/howto/unicode.html#unicode-howto
這兩段文檔應該足夠解決你的困惑,呵呵