Python模組之urllib模組
Py2.x:
Urllib庫
Urllin2庫
Py3.x:
Urllib庫
變化:
在Pytho2.x中使用import urllib2——-對應的,在Python3.x中會使用import urllib.request,urllib.error。
在Pytho2.x中使用import urllib——-對應的,在Python3.x中會使用import urllib.request,urllib.error,urllib.parse。
在Pytho2.x中使用import urlparse——-對應的,在Python3.x中會使用import urllib.parse。
在Pytho2.x中使用import urlopen——-對應的,在Python3.x中會使用import urllib.request.urlopen。
在Pytho2.x中使用import urlencode——-對應的,在Python3.x中會使用import urllib.parse.urlencode。
在Pytho2.x中使用import urllib.quote——-對應的,在Python3.x中會使用import urllib.request.quote。
在Pytho2.x中使用cookielib.CookieJar——-對應的,在Python3.x中會使用http.CookieJar。
在Pytho2.x中使用urllib2.Request——-對應的,在Python3.x中會使用urllib.request.Request。
快速爬取一個網頁
import urllib.request
file=urllib.request.urlopen('http://www.baidu.com')
data=file.read() #讀取全部
dataline=file.readline() #讀取一行內容
fhandle=open("./1.html","wb") #將爬取的網頁儲存在本地
fhandle.write(data)
fhandle.close()
瀏覽器的模擬
應用場景:有些網頁為了防止別人惡意採集其資訊所以進行了一些反爬蟲的設定,而我們又想進行爬取。
解決方法:設定一些Headers資訊(User-Agent),模擬成瀏覽器去訪問這些網站。
import urllib.request
import urllib.parse
url = 'http://www.baidu.com'
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36'
}
request = urllib.request.Request(url, headers=header)
reponse = urllib.request.urlopen(request).read()
fhandle = open("./baidu.html", "wb")
fhandle.write(reponse)
fhandle.close()
代理伺服器的設定
應用場景:使用同一個IP去爬取同一個網站上的網頁,久了之後會被該網站伺服器遮蔽。
解決方法:使用代理伺服器。 (使用代理伺服器去爬取某個網站的內容的時候,在對方的網站上,顯示的不是我們真實的IP地址,而是代理伺服器的IP地址)
def use_proxy(proxy_addr,url):
import urllib.request
proxy=urllib.request.ProxyHandler({'http':proxy_addr})
opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read().decode('utf8')
return data
proxy_addr='61.163.39.70:9999'
data=use_proxy(proxy_addr,'http://www.baidu.com')
print(len(data))
Cookie的使用
應用場景:爬取的網頁涉及登入資訊。訪問每一個網際網路頁面,都是通過HTTP協議進行的,而HTTP協議是一個無狀態協議,所謂的無狀態協議即無法維持會話之間的狀態。
import urllib.request
import urllib.parse
import urllib.error
import http.cookiejar
url='http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=La2A2'
data={
'username':'zhanghao',
'password':'mima',
}
postdata=urllib.parse.urlencode(data).encode('utf8')
header={
'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
request=urllib.request.Request(url,postdata,headers=header)
#使用http.cookiejar.CookieJar()建立CookieJar物件
cjar=http.cookiejar.CookieJar()
#使用HTTPCookieProcessor建立cookie處理器,並以其為引數構建opener物件
cookie=urllib.request.HTTPCookieProcessor(cjar)
opener=urllib.request.build_opener(cookie)
#將opener安裝為全域性
urllib.request.install_opener(opener)
try:
reponse=urllib.request.urlopen(request)
except urllib.error.HTTPError as e:
print(e.code)
print(e.reason)
fhandle=open('./test1.html','wb')
fhandle.write(reponse.read())
fhandle.close()
url2='http://bbs.chinaunix.net/forum-327-1.html' #開啟test2.html檔案,會發現此時會保持我們的登入資訊,為已登入狀態。也就是說,對應的登入狀態已經通過Cookie儲存。
reponse2=urllib.request.urlopen(url)
fhandle2=open('./test2.html','wb')
fhandle2.write(reponse2.read())
fhandle2.close()
相關文章
- Python模組學習:urllibPython
- 學習Python的urllib模組Python
- python小專題——urllib2模組Python
- python模組之collections模組Python
- Python3爬蟲實戰(urllib模組)Python爬蟲
- 爬蟲-urllib模組的使用爬蟲
- python之模組Python
- python–模組之random隨機數模組Pythonrandom隨機
- python–模組之os操作檔案模組Python
- python–模組之基本Python
- python之shutil模組Python
- 【Python】模組之subprocessPython
- python之time模組Python
- 【Python】模組之fileinputPython
- 【Python】模組之queuePython
- 爬蟲-urllib3模組的使用爬蟲
- Python模組之jsonPythonJSON
- python模組之hashlibPython
- Python基礎之模組Python
- Python學習之模組Python
- Python常用模組之sysPython
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- urlparse模組(python模組)Python
- python模組-re模組Python
- python模組 - functools模組Python
- python爬蟲系列(4.5-使用urllib模組方式下載圖片)Python爬蟲
- python模組之os.pathPython
- python模組之configparserPython
- Python之time模組詳解Python
- Python之OS模組詳解Python
- Python學習之常用模組Python
- python學習之argparse模組Python
- 【python】python 模組學習之--FabricPython
- 【python】python 模組學習之--pexpectPython
- Python 內建模組:os模組Python
- [Python模組學習] glob模組Python
- python之匯入模組的方法Python