爬蟲之urllib

1、request模塊html

1.urlopen()     --返回值爲HTTPResponse對象python

urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
            *, cafile=None, capath=None, cadefault=False, context=None)

參數:url必傳瀏覽器

①data:傳入以後請求變爲POST,需轉爲bytes類型的參數網絡

②timeout:設置超時時間,沒有獲得響應則拋出異常,異常類型爲socket.timeout,默認爲全局時間socket

③其餘:context:設置SSL,ca:ca證書(使用HTTPS有用),cadefault已經棄用編碼

2.Request類  --加入Headers信息,假裝成瀏覽器url

class Request:
    def __init__(self, url, data=None, headers={},
                 origin_req_host=None, unverifiable=False,
                 method=None):

參數:url必傳代理

①data:bytes類型code

②headers:字典類型,請求頭,可經過修改User-Agent來假裝瀏覽器。等同於實例方法add_header(k,v)htm

③origin_req_host:請求方的host名稱或ip地址

④unverifiable:沒有權限爲True,默認爲False

⑤method:請求方法

3.高級用法

利用Handler來構建Opener。驗證(HTTPBasicAuthHandler)、代理(ProxyHandler)、Cookies(HTTPCookieProcessor)

2、error模塊

error模塊定義了由request模塊產生的異常

基類:URLError;子類:HTTPError

3、parse模塊

1.urlparse() --返回ParseResult對象(scheme:'http',netloc='www,baidu.com',path='/index.html',params='user',query='id=5',fragment='comment')

http://www.baidu.com/index.html;user?id=5#comment 當url不包含params和query時,fragment會被解析爲path的一部分

ParseResult其實是一個元組,能夠用索引或屬性名來獲取,如result[0],result.scheme

def urlparse(url, scheme='', allow_fragments=True):

參數:url必填

①scheme:協議(http,https),只有在url中不包含scheme信息時設置的纔有效

②allow_fragments:是否忽略fragment,默認不忽略

2.urlunparse()

構造url,參數爲一個可迭代對象如['http','www.baidu.com','index.htm','user','a=6','comment'],長度必須爲6

3.urlsplit()

和urlparse()相似,不單獨解析params,將params合併到path中

--返回SplitResult對象(scheme:'http',netloc='www,baidu.com',path='/index.html;user',query='id=5',fragment='comment')

4.urlunsplit()

與urlunparse()相似

構造url,參數爲一個可迭代對象如['http','www.baidu.com','index.htm','a=6','comment'],長度必須爲5

5.urljoin()

構造url,該方法會分析base的scheme,netloc和path並對新連接缺失的部分進行補充。

def urljoin(base, url, allow_fragments=True):

6.urlencode()

def urlencode(query, doseq=False, safe='', encoding=None, errors=None,
              quote_via=quote_plus):

在構造GET請求參數的時候很是有用,將字典類型序列化爲GET請求參數

from urllib.parse import urlencode

params={'name':'jyh','age':18}
base='http://www.baidu.com?'
url=base+urlencode(params)
print(url)

#---> http://www.baidu.com?name=jyh&age=18

7.parse_qs()

反序列化,將GET請求參數轉回字典

8.parse_qsl()

將GET參數轉化爲元組組成的列表

9.quote()

將內容轉化爲URL編碼的格式

quote('壁紙') --->%E5%A3%81%E7%BA%B8

10.unquote()

URL解碼

4、robotparser模塊 --Robots協議

規定網頁哪些可爬,哪些不可爬  

 

本文參考文獻:[1]崔慶才.python3網絡爬蟲開發實戰[M].北京:人民郵電出版社,2018:102-122.

相關文章
相關標籤/搜索