案例:爬取使用搜狗根據指定詞條搜尋到的頁面資料(例如爬取詞條為『周杰倫』的頁面資料)
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屬性一致,寫入表單傳遞引...