日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python爬虫urllib 数据处理_python爬虫学习笔记(三)-爬取数据之urllib库

發布時間:2023/12/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python爬虫urllib 数据处理_python爬虫学习笔记(三)-爬取数据之urllib库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 小試牛刀

怎樣扒網頁呢?

其實就是根據URL來獲取它的網頁信息,雖然我們在瀏覽器中看到的是一幅幅優美的畫面,但是其實是由瀏覽器解釋才呈現出來的,實質它是一段HTML代碼,加 JS、CSS,如果把網頁比作一個人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML中的,下面我們就寫個例子來扒一個網頁下來

from urllib.request import urlopen

response = urlopen("http://www.baidu.com")

print(response.read().decode())

2. 常見到的方法

requset.urlopen(url,data,timeout)

第一個參數url即為URL,第二個參數data是訪問URL時要傳送的數據,第三個timeout是設置超時時間。

第二三個參數是可以不傳送的,data默認為空None,timeout默認為 socket._GLOBAL_DEFAULT_TIMEOUT

第一個參數URL是必須要傳送的,在這個例子里面我們傳送了百度的URL,執行urlopen方法之后,返回一個response對象,返回信息便保存在這里面。

response.read()

read()方法就是讀取文件里的全部內容,返回bytes類型

response.getcode()

返回 HTTP的響應碼,成功返回200,4服務器頁面出錯,5服務器問題

response.geturl()

返回 返回實際數據的實際URL,防止重定向問題

response.info()

返回 服務器響應的HTTP報頭

3. Request對象

其實上面的urlopen參數可以傳入一個request請求,它其實就是一個Request類的實例,構造時需要傳入Url,Data等等的內容。比如上面的兩行代碼,我們可以這么改寫

from urllib.request import urlopen

from urllib.request import Request

request = Request("http://www.baidu.com")

response = urlopen(requst)

print response.read().decode()

運行結果是完全一樣的,只不過中間多了一個request對象,推薦大家這么寫,因為在構建請求時還需要加入好多內容,通過構建一個request,服務器響應請求得到應答,這樣顯得邏輯上清晰明確

4. Get 請求

大部分被傳輸到瀏覽器的html,images,js,css, … 都是通過GET方法發出請求的。它是獲取數據的主要方法

例如:www.baidu.com 搜索

Get請求的參數都是在Url中體現的,如果有中文,需要轉碼,這時我們可使用

urllib.parse.urlencode()

urllib.parse. quote()

5. Post 請求

我們說了Request請求對象的里有data參數,它就是用在POST里的,我們要傳送的數據就是這個參數data,data是一個字典,里面要匹配鍵值對

發送請求/響應header頭的含義:

名稱

含義

Accept

告訴服務器,客戶端支持的數據類型

Accept-Charset

告訴服務器,客戶端采用的編碼

Accept-Encoding

告訴服務器,客戶機支持的數據壓縮格式

Accept-Language

告訴服務器,客戶機的語言環境

Host

客戶機通過這個頭告訴服務器,想訪問的主機名

If-Modified-Since

客戶機通過這個頭告訴服務器,資源的緩存時間

Referer

客戶機通過這個頭告訴服務器,它是從哪個資源來訪問服務器的。(一般用于防盜鏈)

User-Agent

客戶機通過這個頭告訴服務器,客戶機的軟件環境

Cookie

客戶機通過這個頭告訴服務器,可以向服務器帶數據

Refresh

服務器通過這個頭,告訴瀏覽器隔多長時間刷新一次

Content-Type

服務器通過這個頭,回送數據的類型

Content-Language

服務器通過這個頭,告訴服務器的語言環境

Server

服務器通過這個頭,告訴瀏覽器服務器的類型

Content-Encoding

服務器通過這個頭,告訴瀏覽器數據采用的壓縮格式

Content-Length

服務器通過這個頭,告訴瀏覽器回送數據的長度

6. 響應的編碼

響應狀態碼

響應狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。

常見狀態碼:

號碼

含義

100~199

表示服務器成功接收部分請求,要求客戶端繼續提交其余請求才能完成整個處理過程

200~299

表示服務器成功接收請求并已完成整個處理過程。常用200(OK 請求成功)

300~399

為完成請求,客戶需進一步細化請求。例如:請求的資源已經移動一個新地址、常用302(所請求的頁面已經臨時轉移至新的url)、307和304(使用緩存資源)

400~499

客戶端的請求有錯誤,常用404(服務器無法找到被請求的頁面)、403(服務器拒絕訪問,權限不夠)

500~599

服務器端出現錯誤,常用500(請求未完成。服務器遇到不可預知的情況)

7. Ajax的請求獲取數據

有些網頁內容使用AJAX加載,而AJAX一般返回的是JSON,直接對AJAX地址進行post或get,就返回JSON數據了

8. 請求 SSL證書驗證

現在隨處可見 https 開頭的網站,urllib可以為 HTTPS 請求驗證SSL證書,就像web瀏覽器一樣,如果網站的SSL證書是經過CA認證的,則能夠正常訪問,如:https://www.baidu.com/

如果SSL證書驗證不通過,或者操作系統不信任服務器的安全證書,比如瀏覽器在訪問12306網站如:https://www.12306.cn/mormhweb/的時候,會警告用戶證書不受信任。(據說 12306 網站證書是自己做的,沒有通過CA認證)

# 忽略SSL安全認證

context = ssl._create_unverified_context()

# 添加到context參數里

response = urllib.request.urlopen(request, context = context)

總結

以上是生活随笔為你收集整理的python爬虫urllib 数据处理_python爬虫学习笔记(三)-爬取数据之urllib库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。