在Python3.x中,urllib包下有四個模塊分別是
- urllib.request(python2.x的urllib2),打開和讀取urls
- urllib.error魄健,包含了urllib.request所拋出的異常
- urllib.parse愤估,解析urls
- urllib.robotparser智嚷,解析robots.txt文件
1、urllib.parse.urlencode()
- 使用urllib.parse的urlencode()函數(shù)潘拱,幫我們將key:value這樣的鍵值對轉(zhuǎn)換成key=value這樣的字符串揩瞪,解碼工作可以使用urllib.parse的unquote()函數(shù)
- 一般HTTP請求提交數(shù)據(jù)赋朦,需要編碼成URL編碼格式,然后作為URL的一部分,或者作為參數(shù)傳到urllib.request.Request對象中宠哄。
#/usr/bin/env python3
#-*- utf8 -*-
from urllib import request, parse
word = {'ljs':"李建生"}
# 通過urllib.urlencode()方法壹将,將字典鍵值對按URL編碼轉(zhuǎn)換,從而能被web服務(wù)器接受
encode = parse.urlencode(word)
print(encode)
# 通過urllib.unquote()方法毛嫉,把URL編碼字符串诽俯,轉(zhuǎn)換為原始字符串
print(parse.unquote("ljs=%E6%9D%8E%E5%BB%BA%E7%94%9F"))
#ljs=%E6%9D%8E%E5%BB%BA%E7%94%9F
#ljs=李建生
Get方式
- Get請求一般用于我們向服務(wù)器獲取數(shù)據(jù),比如說承粤,我們用百度搜索王菊
image.png - 可以看到瀏覽器的url跳轉(zhuǎn)到 https://www.baidu.com/s?wd=王菊暴区,后面還有一大串,我們可以選擇復制瀏覽器的辛臊,也可以f12仙粱,然后復制紅色框里的,都一樣彻舰,瀏覽器顯示的是王菊伐割,但是復制了之后是編碼后的∪谢剑可以看到http://www.baidu.com/s之后就會出現(xiàn)一大串隔心,其中就包括我們要搜索的王菊
image.png
https://www.baidu.com/s?wd=%E7%8E%8B%E8%8F%8A&rsv_spt=1&rsv_iqid=0xb5506d1e00018681&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=%25E7%258E%258B%25E8%258F%258A&rsv_t=76c5iEe0sNG%2F7ghbj2%2B9%2FiRWb4Mz2vab6PycV4g33SQf2TehbSOJ105%2FDBFBm6qT4UR%2F&rsv_pq=ef586b1600016dd0
- 我們嘗試使用默認的Get方式來發(fā)送請求
#/usr/bin/env python3
#-*- utf8 -*-
from urllib import request, parse
url = 'http://www.baidu.com/s'
word = {'wj':'王菊'}
word = parse.urlencode(word) # 轉(zhuǎn)換成url編碼格式
newurl = url + '?' + word
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
req = request.Request(newurl, headers=headers)
res = request.urlopen(req)
print(res.read())
- 輸出就不貼,一堆而且網(wǎng)不好好久才出來尚胞,差點卡死在那里硬霍。
批量爬取貼吧網(wǎng)頁數(shù)據(jù)
瀏覽器輸入一個百度貼吧的地址,比如:
百度貼吧LOL吧第一頁:https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=0
第二頁:https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=50
第三頁:https://tieba.baidu.com/f?kw=lol&ie=utf-8&pn=100
- 可以發(fā)現(xiàn)規(guī)律笼裳,貼吧中每個頁面不同之處就是url最后的pn的值唯卖,其余都是一樣的,我們可以抓住這個規(guī)律侍咱。寫一個小爬蟲程序耐床,爬取LOL貼吧的所有網(wǎng)頁