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的urllib模組Python
- python模組之collections模組Python
- python之模組Python
- python–模組之random隨機數模組Pythonrandom隨機
- python–模組之os操作檔案模組Python
- 爬蟲-urllib模組的使用爬蟲
- python 模組:itsdangerous 模組Python
- Python模組:time模組Python
- python模組之configparserPython
- python模組之hashlibPython
- Python模組之jsonPythonJSON
- python之shutil模組Python
- python–模組之基本Python
- Python基礎之模組Python
- Python學習之模組Python
- [Python模組學習] glob模組Python
- 爬蟲-urllib3模組的使用爬蟲
- 模組學習之hashlib模組
- 模組學習之logging模組
- Python 模組Python
- Python之time模組詳解Python
- Python學習之 datetime模組Python
- python模組之os.pathPython
- Python學習之常用模組Python
- Python常用模組(random隨機模組&json序列化模組)Pythonrandom隨機JSON
- Python基礎12(模組與datetime模組)Python
- Python中模組是什麼?Python有哪些模組?Python
- 15 Python模組Python
- python Subprocess 模組Python
- Python模組(module)Python
- Python - 模組包Python
- python——typing模組Python
- [Python] pipe模組Python
- Python-模組Python
- Python functools 模組Python
- Python pymsql模組PythonSQL
- Python:requests模組Python
- Python webargs 模組PythonWeb