Urllib獲取資料

2022-06-29 21:45:22 字數 4526 閱讀 6425

from urllib import request 或 import urllib.request

#

-*- coding = utf-8 -*-

import

urllib.request as req

#def

get():

url = "

"#獲取乙個get請求

response =req.urlopen(url)

#decode('utf-8')使用utf-8解碼

print(response.read().decode('

utf-8'))

#獲取乙個post請求,使用輔助**測試

defpost_test():

data =bytes()

url = "

"response = req.urlopen(url, data=data)

print(response.read().decode('

utf-8'))

#獲取乙個get請求

defget_test():

#使用try捕捉異常

try:

url = "

"#timeout=x 設定超時,避免長時間耗在這裡

"#timeout=x 設定超時,避免長時間耗在這裡

response = req.urlopen(url, timeout=10)

#獲取響應狀態碼

print

(response.status)

#獲取響應頭中指定鍵值的內容

print(response.getheader('

date'))

#獲取響應頭的全部內容

print

(response.getheaders())

#使用爬蟲訪問豆瓣,返回報錯418,拒絕爬蟲

defget_douban():

url = "

"#timeout=x 設定超時,避免長時間耗在這裡

response = req.urlopen(url, timeout=10)

print(response.read().decode('

utf-8'))

#偽裝訪問,以豆瓣舉例

defget_douban_disguise():

url = "

"#自定義給伺服器的報頭

headers =

#headers = x 設定向伺服器傳送的報頭,這個res是我們封裝的請求物件,不是響應物件

res = req.request(url, headers=headers)

#獲取響應物件,跟未偽裝不同的是,偽裝過後,沒有被豆瓣拒絕訪問

response =req.urlopen(res)

print(response.read().decode('

utf-8'))

#定義分隔線長度

defsplit(num):

for i in range(1, num):

print("

--------------

", end=''

)

print("\n"

)#呼叫測試程式

defmain():

split(10)

get_douban_disguise()

split(10)

#主程式入口

if__name__ == '

__main__':

main()

通過瀏覽器正常訪問豆瓣top250,右鍵點選開發者模式(f12),獲取 user-agent 的內容

urllib.request 的作用是獲取html頁面資訊,這裡以豆瓣top250的十個頁面為例

#

獲取html資訊

defask_url(url):

#設定傳給伺服器的header頭部資訊,偽裝自己是正規瀏覽器訪問

headers =

#用於儲存獲取的html檔案

html = ""

#最好用 try-except 捕捉異常

try:

#封裝乙個request物件,將自定義的頭部資訊加入進去

res = req.request(url, headers=headers)

#向指定的url獲取響應資訊,設定超時,防止長時間耗在乙個頁面

response = req.urlopen(res, timeout=10)

#讀取html資訊,使用decode('utf-8')解碼

html = response.read().decode('

utf-8')

#如果出錯,就捕捉報錯資訊並列印出,這裡使用exception 泛泛的意思一下

except

exception as error:

#出現異常時候,列印報錯資訊

print("

ask_url is error :

" +error)

#將獲得的html頁面資訊返回

return html

#

-*- coding = utf-8 -*-

#從 urllib 包中匯入 request 子包,並給它取別名為 req

from urllib import

request as req

#迴圈所有的html頁面資訊

defget_data(base_url):

#獲得多有頁面有價值的資訊,然後集中存放與datalist列表中

datalist =

#迴圈遍歷,修改?start=起始排行序號,獲取不同分頁的豆瓣top資訊,url分頁格式去豆瓣換頁內容試試

#例如第一頁第 top 0-24,第二頁是top 25-49條 ?start=25 這個引數,會讓伺服器響應第二頁的25條資訊

for i in range(0, 250, 25):

#使用基礎位址 '?start=' + 偏移位址如 '25'

url = base_url +str(i)

#獲取html存放與html變數中

html =ask_url(url)

#可以看看獲取的html資訊

#print(html)

#接下來是逐一解析資料

return

datalist

#獲取html資訊

defask_url(url):

#設定傳給伺服器的header頭部資訊,偽裝自己是正規瀏覽器訪問

headers =

#用於儲存獲取的html檔案

html = ""

#最好用 try-except 捕捉異常

try:

#封裝乙個request物件,將自定義的頭部資訊加入進去

res = req.request(url, headers=headers)

#向指定的url獲取響應資訊,設定超時,防止長時間耗在乙個頁面

response = req.urlopen(res, timeout=10)

#讀取html資訊,使用decode('utf-8')解碼

html = response.read().decode('

utf-8')

#如果出錯,就捕捉報錯資訊並列印出,這裡使用exception 泛泛的意思一下

except

exception as error:

#出現異常時候,列印報錯資訊

print("

ask_url is error :

" +error)

#將獲得的html頁面資訊返回

return

html

#以下split、main兩個函式和 if __name__ 程式主入口是我個人程式設計習慣,與上述內容無本質關聯

#定義分隔線長度

defsplit(num):

for i in range(1, num):

print("

------------

", end=''

)

print()#

呼叫測試程式

defmain():

split(10)

get_data(

"?start=")

split(10)

#主程式入口

if__name__ == '

__main__':

main()

Python3 urllib 網路資料獲取 模組

本文由 luzhuo 編寫,請保留該資訊.原文 以下 以python3.6.1為例 less is more coding utf 8 urllibdemo.py urllib演示 from urllib import request 請求url,支援 http 0.9 1.0 ftp 本地檔案 u...

Urllib資料抓取

python 3中,urllib是乙個收集幾個模組來使用url的軟體包,具備以下幾個功能 urllib.request.urlopen url,data none,timeout,data 預設值為none,表示請求方式為get,反之為post timeout 超時設定 匯入urllib impor...

練手爬蟲用urllib模組獲取

有個人看一段python2的 有很多錯誤 html gethtml 攢外快網 print getimg html import re import urllib.request def gethtml url page urllib.request.urlopen url 獲取 html page....