python抓取一個網頁的源代碼並存儲到本地文件

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):

https://www.bilibili.com/v/technology/digital/?spm_id_from=333.334.primary_menu.47#/  是  https://www.bilibili.com/的子網頁。則此處的referer=https://www.bilibili.com/

 

注意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正則表達式

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章