python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)
urllib庫
urllib庫是Python中一個(gè)最基本的網(wǎng)絡(luò)請(qǐng)求庫。可以模擬瀏覽器的行為,向指定的服務(wù)器發(fā)送一個(gè)請(qǐng)求,并可以保存服務(wù)器返回的數(shù)據(jù)。
一、urlopen函數(shù):
在Python3的urllib庫中,所有和網(wǎng)絡(luò)請(qǐng)求相關(guān)的方法,都被集到urllib.request模塊下面了,以先來看下urlopen函數(shù)基本的使用:
from urllib import parse,requestresp=request.urlopen('http://www.baidu.com') print(resp.read())實(shí)際上,使用瀏覽器訪問百度,右鍵查看源代碼。你會(huì)發(fā)現(xiàn),跟我們剛才打印出來的數(shù)據(jù)是一模一樣的。也就是說,上面的三行代碼就已經(jīng)幫我們把百度的首頁的全部代碼爬下來了。一個(gè)基本的ur請(qǐng)求對(duì)應(yīng)的python代碼真的非常簡單。
以下對(duì)urlopen函數(shù)的進(jìn)行詳細(xì)講解:
二、urlretrieve函數(shù):
這個(gè)函數(shù)可以方便的將網(wǎng)頁上的一個(gè)文件保存到本地。以下代碼可以非常方便的將百度的首頁下載到本地:
request.urlretrieve("http://www.baidu.com/","baidu.html")三、urlencode函數(shù):
用瀏覽器發(fā)送請(qǐng)求的時(shí)候,如果url中包含了中文或者其他特殊字符,那么瀏覽器會(huì)自動(dòng)的給我們進(jìn)行編碼。而如果使用代碼發(fā)送請(qǐng)求,那么就必須手動(dòng)的進(jìn)行編碼,這時(shí)候就應(yīng)該使用urlencode函數(shù)來實(shí)現(xiàn)。urlencode 可以把字典數(shù)據(jù)轉(zhuǎn)換為URL編碼的數(shù)據(jù)。
示例代碼如下:
四、parse-qs函數(shù):
可以將經(jīng)過編碼后的url參數(shù)進(jìn)行解碼.示例代碼如下:
from urllib import parse qs="name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hel1o+world&age=100" print(parse.parse_qs(qs))五、urlparse和urlsplit:
有時(shí)候拿到一個(gè)url想要對(duì)這個(gè)url中的各個(gè)組成部分進(jìn)行分割,那么這時(shí)候就可以使用urlparse 或者是urlsplit來進(jìn)行分割。
urlparse VS urlsplit:
urlparse和urlsplit基本上是一模一樣的。唯一不一樣的地方是,'urlparse里面多了一個(gè)params屬性,而urlsplit 沒有這個(gè)params 屬性。
比如有一個(gè)ur1為:url=“http://www.baidu.com/s;he116wd=python&username=abc#1”,那么urlparse可以獲取到hello,而urlsplit不可以獲取到ur1中的params。不過params也用得比較少。
示例代碼如下:
from urllib import parse# urlparse()函數(shù),可以對(duì)url中的各個(gè)組成部分進(jìn)行分割 url = 'http://www.baid.com/s;hello?wd=python&username=abc#1' result = parse.urlparse(url) print(result) print('sheme:',result.scheme) print('netloc:',result.netloc) print('path:',result.path) print('params:',result.params) print('query:',result.query) print('fragment:',result.fragment) print("___________________________________________________")# urlsplit()函數(shù),可以對(duì)url中的各個(gè)組成部分進(jìn)行分割。 # 與urlparse()函數(shù)的區(qū)別是獲取不到params參數(shù) url = 'http://www.baid.com/s;hello?wd=python&username=abc#1' result1 = parse.urlsplit(url) print(result1) print('sheme:',result1.scheme) print('netloc:',result1.netloc) print('path:',result1.path) print('query:',result1.query) print('fragment:',result1.fragment)六、request.Request類:
如果想要在請(qǐng)求的時(shí)候增加一些請(qǐng)求頭,那么就必須使用request.Request類來實(shí)現(xiàn)。比如要增加一個(gè)user-Agent,示例代碼如下:
JSON在線解析網(wǎng)站:http://json.cn/
自動(dòng)獲取本地IP地址網(wǎng)站:http://httpbin.org/
七、代碼:
from urllib import request from urllib import parse# resp = request.urlopen('http://www.baidu.com') # print(resp.read()) # print(resp.read(10)) # print(resp.readline()) # print(resp.readlines()) # print(resp.getcode())# urlretrieve函數(shù),可以將網(wǎng)頁上的一個(gè)文件保存到本地 # request.urlretrieve("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1593927965278&di=8749753c6b8d8d142eb37ebac38fe7de&imgtype=0&src=http%3A%2F%2Fcyimg.quji.com%2Fnewsimg%2F2016%2F02%2F19%2F0449ff918e2484761f2dee7af1432108.jpg",'luban.jpg')# urlencode函數(shù),可以把字典數(shù)據(jù)轉(zhuǎn)換成url編碼的數(shù)據(jù)# data = {'name':'爬蟲基礎(chǔ)','greet':'hello world','age':100} # qs = parse.urlencode(data) # print(qs)# 案例 # url = 'http://www.baidu.com/s?wd=劉德華' url = 'http://www.baidu.com/s' params = {"wd":"劉德華"} qs = parse.urlencode(params) print(qs) url = url + "?" + qs print(url) resp = request.urlopen(url) print(resp.read())# parse_qs函數(shù),可以將經(jīng)過編碼后的url參數(shù)進(jìn)行解碼 print(parse.parse_qs(qs))總結(jié)
以上是生活随笔為你收集整理的python网络爬虫系列(一)——urllib库(urlopen、urlretrieve、urlencode、parse-qs、urlparse和urlsplit、request.Request类)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: deepin tim(wine)无法安装
- 下一篇: python中split函数_pytho