python * urllib_urlopen( )

python * urllib_urlopen( )

Python urllib 庫提供了一個從指定的 URL 地址獲取網頁數據,而後對其進行分析處理,獲取想要的數據。

1、urllib模塊urlopen()函數:

urlopen(url, data=None, timeout, proxies=None,context=None)

  • 建立一個表示遠程url的類文件對象,而後像本地文件同樣操做這個類文件對象來獲取遠程數據。
  • 參數url表示遠程數據的路徑,通常是網址,也能夠是一個urllib.request對象。
  • 參數data默認是None,此時以GET方式發送請求;當用戶給出data參數的時候,改成POST方式發送請求。html

  • HTTP是python中實現的衆多網絡通訊http、https、ftp等協議中,惟一使用data 參數的,也就是說只有打開的是http網址的時候,自定義data參數纔會有做用 。
  • data必須是一個字節數據對象(Python的bytes object)
  • data必須符合標準格式,使用urllib.parse.urlencode()將自定義的data轉換成標準格式;而這個函數所能接收的參數類型是pyhon中的mapping object(鍵/值對,如dict) or a sequence of two-element tuples(元素是tuple的列表)。
  • timeout是設置超時時間。
  • 參數proxies用於設置代理。
  • context參數:實現SSL加密傳輸。python

urlopen返回 一個類文件對象(fd),它提供了以下方法:
read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與文件對象徹底同樣;
info():返回一個httplib.HTTPMessage 對象,表示遠程服務器返回的頭信息(header)
getcode():返回Http狀態碼。若是是http請求,200表示請求成功完成;404表示網址未找到;
geturl():返回請求的url;web

2、實驗 ①

一、打開一個網頁獲取全部內容json

''' urlopen是一個類,res至關於它的一個實例
class request(self,url,data)
       self.url = url
       self.data = data
res = request('http://baidu.com','data')
''' 

# 其實res至關於'類urlopen'的一個實例,給它傳入'baidu.com'等參數的過程就是實例化  
from urllib.request import urlopen
res = urlopen("http://www.baidu.com")
doc = res.read()
print(doc)

#另外一種書寫格式
import urllib.request
res = urllib.request.urlopen('http://www.baidu.com')
doc = res.read()
print(doc)

二、獲取http頭部(頭中有編碼格式信息)服務器

from urllib.request import urlopen
res = urlopen("http://www.baidu.com")

#返回一個httplib.HTTPMessage 對象,表示遠程服務器返回的頭信息
print(res.info())

# 請求頭部
print(res.getheader('Content-Type'))

# 返回請求的url地址
print(res.geturl())

# 返回Http狀態碼.若是是http請求,200=請求成功完成;404=網址未找到
print(res.getcode())

三、調用接口,並處理返回值json網絡

from urllib.request import urlopen

def start_pack(real_match):

    for x in real_match.keys():
        start_url = 'http://www.google.com/start.do?ips=%s&versionId=%s&operator=dw_%s' % (",".join(real_match[x]), x,os.getlogin())
        start_html = urllib2.urlopen(start_url)
        start_json = json.loads(start_html.read())

        task_url = 'http://www.google.com/TaskId.do?task_id=%s' % start_json['object']['taskId']
        task_html = urllib2.urlopen(task_url)
        task_json = json.loads(task_html.read())

        if start_json['code'] == 0:
        print "package %s start succees!" % task_json['object'][0]['package_name']
        else:
        print "package %s start error!" % task_json['object'][0]['package_name']

        start_html.close()
        task_html.close()

實驗②

#coding=utf-8
#Python3.4.3   OS:W7-32

'''利用有道翻譯進行在線翻譯'''

import urllib.request
import urllib.parse
import json

def traslate(words):
    # 目標URL
    targetURL = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null'
    # 自定義表單,words表示的是用戶要翻譯的內容。這裏使用的是dict類型,也可使用元組列表(已經試過的)。
    data = {}
    data['type'] = 'AUTO'
    data['i'] = words
    data['doctype'] = 'json'
    data['xmlVersion'] = '1.8'
    data['keyfrom'] = 'fanyi.web'
    data['ue'] = 'UTF-8'
    data['action'] = 'FY_BY_CLICKBUTTON'
    data['typoResult'] = 'true'

    # 將自定義data轉換成標準格式
    data = urllib.parse.urlencode(data).encode('utf-8')

    # 發送用戶請求
    html = urllib.request.urlopen(targetURL, data)

    # 讀取並解碼內容
    rst = html.read().decode("utf-8")
    rst_dict = json.loads(rst)

    return rst_dict['translateResult'][0][0]['tgt']

if __name__ == "__main__":
    print("輸入字母q表示退出")
    while True:
        words = input("請輸入要查詢的單詞或句子:\n")
        if words == 'q':
            break
        result = traslate(words)
        print("翻譯結果是:%s"%result)
相關文章
相關標籤/搜索