python爬蟲 urllib模組url編碼處理

2021-10-09 04:47:56 字數 2085 閱讀 4704

案例:爬取使用搜狗根據指定詞條搜尋到的頁面資料(例如爬取詞條為『周杰倫』的頁面資料)

import urllib.request

# 1.指定url

url =

'周杰倫'

'''2.發起請求:使用urlopen函式對指定的url發起請求,

該函式返回乙個響應物件,urlopen代表開啟url

'''response = urllib.request.urlopen(url=url)

# 3.獲取響應物件中的頁面資料:read函式可以獲取響應物件中儲存的頁面資料(byte型別的資料值)

page_text = response.read(

)# 4.持久化儲存:將爬取的頁面資料寫入檔案進行儲存

with

open

("sougou.html"

,"wb"

)as f:

f.write(page_text)

print

("寫入資料成功"

)f.close(

)

編碼錯誤

【注意】上述**中url存在非ascii編碼的資料,則該url無效。如果對其發起請求,則會報如下錯誤:

unicodeencodeerror:

'ascii' codec can't encode characters in position 15-17

: ordinal not

inrange

(128

)

url的特性:url不可以存在非ascii編碼字元資料,url必須為ascii編碼的資料值。所以我們在爬蟲**中編寫url時,如果url中存在非ascii編碼的資料值,則必須對其進行ascii編碼後,該url方可被使用。

上面的「周杰倫」 不是ascii編碼字元資料,所以url就會變成無效的url,不符合url特性,所以報錯誤

所以必須對url中的非ascii的資料進行ascii的編碼,則該url方可被發起請求:

需要用到 urllib.parse

方法 1:使用quote函式

quote函式作用:對url中所存在的特殊字元進行ascii的編碼,把url中的非ascii編碼的字元單獨取出來,使用quote函式進行轉碼,

轉碼之後,把轉碼的結果拼接到原有的url當中。

'''

'''import urllib.request

import urllib.parse

# 1.指定url

url =

'周杰倫'

word = urllib.parse.quote(

"周杰倫"

)# 檢視轉碼後結果

print

(word)

# %e5%91%a8%e6%9d%b0%e4%bc%a6

from urllib.request import urlopen

import urllib.parse

# 1.指定url

url =

''# url的特性:url不可以存在非ascii編碼字元資料

word = urllib.parse.quote(

"周杰倫"

)# 將編碼後的資料值拼接回url中

url = url+word # 有效url

'''2.發起請求:使用urlopen函式對指定的url發起請求,

該函式返回乙個響應物件,urlopen代表開啟url

'''response = urlopen(url=url)

# 3.獲取響應物件中的頁面資料:read函式可以獲取響應物件中儲存的頁面資料(byte型別的資料值)

page_text = response.read(

)# 4.持久化儲存:將爬取的頁面資料寫入檔案進行儲存

with

open

("周杰倫.html"

,"wb"

)as f:

f.write(page_text)

print

("寫入資料成功"

)

python爬蟲(urllib簡介)

通過url開啟任意資源,官方鏈結 urllib模組提供乙個高階介面,可以在通過url在網上獲取資料。其中,urlopen 函式類似於內建函式open 但接受的是url不是檔名。只能開啟用於讀取的url,不能任何查詢操作。urllib.urlopen url data prpxies context ...

python 網路爬蟲 urllib

1.網域名稱與ip位址 網域名稱 dns伺服器 ip位址 你的電腦先把網域名稱傳給dns伺服器,通過dns伺服器找到網域名稱所對應的ip位址,在傳回你的電腦進行訪問。2.呼叫urllib進行爬取 讀取資料 import urllib f urllib.urlopen print f.read 讀取狀...

Python爬蟲urllib筆記整合

程式一 爬取post網頁檔案。第一步 進行網頁爬取的關鍵在於了解網頁結構,清楚網頁 找到自己需要的網頁內容 一般指所在標籤,類別,樣式等 是什麼 本次程式是找到post表單所在位置並了解必須傳遞的引數是什麼。第二步 匯入urllib的抓包 parse 引數名與表單中的name屬性一致,寫入表單傳遞引...