1.1讀取一個網頁的源代碼:
url:我們要爬取的網頁鏈接(例如:url = “https://www.hao123.com”)
#讀取一個網頁的源代碼
import urllib.request def read_pageHtml(url): file = urllib.request.urlopen(url) data = file.read() return data url = "https://www.hao123.com" data = read_pageHtml(url) print(data)
1.2將讀取的網頁內容存儲到本地文件的兩種常用辦法:
方法一:
storagePath:存儲的位置+文件名(例如:storagePath = "C:/Users/shijun/desktop/2.html")
data:抓取的網頁信息
#將讀取的網頁以網頁的形式存儲到本地文件 def storageToLocalFiles(storagePath, data): fhandle = open(storagePath,"wb") fhandle.write(data) fhandle.close() storagePath = "C:/Users/shijun/desktop/2.html" data = #我們獲取的網頁信息 storageToLocalFiles(storagePath, data)
運行結束之後我們就可以在桌面上看到一個網頁了
方法二:
storagePath:存儲的位置+文件名(例如:storagePath = "C:/Users/shijun/desktop/2.html")
url:我們要爬取的網頁鏈接(例如:url = “https://www.hao123.com”)
#將讀取的網頁以網頁的形式存儲到本地文件 def s(url, storagePath): import urllib.request filename = urllib.request.urlretrieve(url, filename=storagePath)
1.3一些常用指令
1.3.1:常用指令
file.info() : 讀取當前環境相關信息
file.getcode():獲取當前抓取網頁的狀態碼
file.geturl():獲取當前抓取網頁的URL地址
1.3.2:編碼問題
URL是有一定規則,或者說,我們的字符串是有一定的要求的(比如:只可以是字母、數字、下劃線、部分符號等,如果有漢字的話,很可能就執行不了)。如果我們的字符串不符合要求,很可能就無法運行。那是不是沒有解決辦法呢。答案是NO!
我們可以用一個叫quote()的方法對字符串進行編碼,然後就可以運行了。
import urllib.request s = "hello everyone!" data_quote = urllib.request.quote("hello everyone!") print(data_quote) data_unquote = urllib.request.unquote(data_quote) print(data_unquote)
輸出結果爲:
hello%20everyone%21 hello everyone!
2瀏覽器的僞裝
這裏的僞裝只是一些初步的僞裝(日常應該夠用了),主要是對用戶身份(User-Agent)和信息來源網址(Referer)兩部分進行僞裝。
信息來源網址(Referer):
注意:data = urllib.request.urlopen(url).read()此處我們所獲得的是二進制的字節碼,有時候我們在對字節碼進行編碼的時候(data.decode(“utf-8)),發現會出現亂碼的情況。這往往是我們在設置header的時候指定了"Accept-Encoding": "gzip, deflate, br",此時我們只需要將這行代碼去掉就可以解決亂碼問題。
"Accept-Encoding": "gzip, deflate, br"這個是用來設置從網站中接收的返回數據是否進行gzip壓縮。如果設置了,就對數據進行壓縮。而瀏覽器會自動的對數據進行gzip解壓。這也就解釋了爲什麼我們通過瀏覽器查看網頁源代碼沒問題,自己爬取下來,然後打開就會出現亂碼。
import urllib.request #瀏覽器僞裝 def browsersCamouflage(): headers = { "Accept": "image/webp,image/apng,image/*,*/*;q=0.8", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "Referer": "https://www.hao123.com/", "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36" } #創建opener對象 opener = urllib.request.build_opener() hdeadall = [] #過循環遍歷字典,構造headers信息 for key, value in headers.items(): item = (key, value) hdeadall.append(item) #設置opener對象的頭信息 opener.addheaders = hdeadall Return opener url = "https://www.hao123.com" opener = browsersCamouflage() #安裝opener爲全局 urllib.request.install_opener(opener) data = urllib.request.urlopen(url).read() print(data)
3正則表達式