成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【Python爬蟲實戰】用urllib與服務端交互(發送和接收數據)

開發 后端
urllib最基本的一個功能就是向服務端發送HTTP請求,然后接收服務端返回的響應數據。這個功能只需要通過urlopen函數就可以搞定。例如,下面的代碼向百度發送HTTP GET請求,然后輸出服務端的響應結果。

[[385221]]

urllib是Python3中內置的HTTP請求庫,不需要單獨安裝,官方文檔鏈接如下:https://docs.python.org/3/library/urllib.html從官方文檔可以看出,urllib包含4個模塊,如圖1所示。

 

 


圖1 urllib官方文檔目錄

 

這4個模塊的功能描述如下:

 

  • request:最基本的HTTP請求模塊,可以用來發送HTTP請求,并接收服務端的響應數據。這個過程就像在瀏覽器地址欄輸入URL,然后按Enter鍵一樣。
  • error:異常處理模塊,如果出現請求錯誤,我們可以捕獲這些異常,然后根據實際情況,或者進行重試,或者直接忽略,或進行其他操作。
  • parse:工具模塊,提供了很多處理URL的API,如拆分、解析、合并等。
  • robotparser:主要用來識別網站的robots.txt文件,然后判斷哪些網站可以抓取,哪些網站不可以抓取。

本文主要介紹如何通過urllib發送HTTP GET請求和HTTP POST請求,并獲取相應數據。

1. 用urlopen函數發送HTTP GET請求

urllib最基本的一個功能就是向服務端發送HTTP請求,然后接收服務端返回的響應數據。這個功能只需要通過urlopen函數就可以搞定。例如,下面的代碼向百度發送HTTP GET請求,然后輸出服務端的響應結果。

  1. import urllib.request 
  2. response=urllib.request.urlopen('https://baidu.com'
  3. # 將服務端的響應數據用utf-8解碼 
  4. print(response.read().decode('utf-8')) 

運行結果如圖2所示。

圖2 百度首頁的HTML代碼

我們可以看到,使用urllib與服務端交互是非常容易的,除了import語句外,真正與業務有關的代碼只有2行,就完成了整個與服務端交互的過程。其實這個過程已經完成了爬蟲的第一步,就是從服務端獲取HTML代碼,然后就可以利用各種分析庫對HTML代碼進行解析,提取出我們感興趣的URL、文本、圖像等。其實urlopen函數返回的是一個對象,而read是這個對象的一個方法,可以利用type方法輸出這個對象的類型,當我們知道了對象類型后,就可以很容易知道這個對象中有哪些API,然后調用它們。

  1. import urllib.request 
  2. response=urllib.request.urlopen('https://baidu.com'
  3. print(type(response)) 

這段代碼會輸出如下的結果:

  1. <class 'http.client.HTTPResponse'

現在我們了解到,urlopen函數返回的是HTTPResponse類型的對象,主要包含read、getheader、getheaders等方法,以及msg、version、status、debuglevel、closed等屬性。下面是一個實際的案例,用來演示了HTTPResponse對象中主要的方法和屬性的用法。

  1. import urllib.request 
  2. # 向京東商城發送HTTP GET請求,urlopen函數即可以使用http,也可以使用https 
  3. response=urllib.request.urlopen('https://www.jd.com'
  4. # 輸出urlopen函數返回值的數據類型 
  5. print('response的類型:',type(response)) 
  6. # 輸出響應狀態碼、響應消息和HTTP版本 
  7. print('status:',response.status,' msg:',response.msg,' version:', response.version) 
  8. # 輸出所有的響應頭信息 
  9. print('headers:',response.getheaders()) 
  10. # 輸出名為Content-Type的響應頭信息 
  11. print('headers.Content-Type',response.getheader('Content-Type')) 
  12. # 輸出京東商城首頁所有的HTML代碼(經過utf-8解碼) 
  13. print(response.read().decode('utf-8')) 

運行結果如圖3所示。

圖3 HTTPResponse對象的API演示

2. 用urlopen函數發送HTTP POST請求

urlopen函數默認情況下發送的是HTTP GET請求,如果要發送HTTP POST請求,需要使用data命名參數,該參數是bytes類型,需要用bytes類將字符串形式的數據轉換為bytes類型。下面的例子

下面的例子向http://httpbin.org/post發送HTTP POST請求,并輸出返回結果。

  1. import urllib.request 
  2. # 將表單數據轉換為bytes類型,用utf-8編碼 
  3. data=bytes(urllib.parse.urlencode({'name':'Bill','age':30}),encoding='utf-8'
  4. # 提交HTTP POST請求 
  5. response=urllib.request.urlopen('http://httpbin.org/post',data=data) 
  6. # 輸出響應數據 
  7. print(response.read().decode('utf-8')) 

這段代碼中一開始提供了一個字典形式的表單數據,然后使用urlencode方法將字典類型的表單轉換為字符串形式的表單,接下來將字符串形式的表單按utf-8編碼轉換為bytes類型,這就是要傳給urlopen函數的data命名參數的值,要注意,一旦指定了data命名參數,urlopen函數就會向服務端提交HTTP POST請求,這里并不需要顯式指定要提交的是POST請求。

本例將HTTP POST請求提交給了http://httpbin.org/post,這是一個用于測試HTTP POST請求的網址,如果請求成功,服務端會將HTTP POST請求信息原封不動地返回給客戶端。運行結果如圖4所示。

圖4 HTTP POST請求信息

 本文轉載自微信公眾號「極客起源」,可以通過以下二維碼關注。轉載本文請聯系極客起源公眾號。

 

責任編輯:武曉燕 來源: 極客起源
相關推薦

2011-09-09 09:44:23

WCF

2011-08-17 09:14:03

FlexJava

2011-06-07 16:01:46

Android 服務器 數據交互

2023-12-15 16:21:19

2024-10-15 15:29:55

2024-11-21 13:13:33

WindowsFTP文件資源管理器

2009-08-21 16:14:52

服務端與客戶端通信

2009-08-21 15:59:22

服務端與客戶端通信

2016-03-18 09:04:42

swift服務端

2014-06-12 14:52:52

python服務器

2009-08-21 15:36:41

服務端與客戶端

2009-08-21 15:54:40

服務端與客戶端

2017-08-22 17:30:14

Python爬蟲

2009-12-07 17:28:55

WCF數據

2022-02-18 11:13:53

監控架構系統

2012-03-02 10:38:33

MySQL

2013-03-25 10:08:44

PHPWeb

2010-11-19 14:22:04

oracle服務端

2021-06-30 07:19:35

雙向流式RPCgRPC

2021-05-19 09:01:37

Pythonurllib庫requests庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久久久久久久软件 | 精品久久久久久久久久久久 | 欧美日韩在线观看一区二区三区 | 欧美在线a | 日韩免费高清视频 | 精品久久久久久久人人人人传媒 | 在线成人免费视频 | 欧美日韩国产一区二区三区 | 日韩欧美在线一区 | 欧美一区二区三区在线观看 | 99re视频在线| 亚洲精品一区二区三区蜜桃久 | 中文字幕在线观看视频一区 | 伊人一区 | 免费观看的av毛片的网站 | 亚洲www | 久久国产精品网 | www.国产一区 | 中文字幕高清 | 久热久草 | 日韩精品一区二区三区视频播放 | 日韩a级片| 免费观看视频www | 在线观看免费av网 | 国产露脸国语对白在线 | 91色视频在线观看 | 精品日韩电影 | 欧美日韩电影在线 | 免费在线黄色av | 国产精品178页 | 羞羞视频在线观看 | 在线 丝袜 欧美 日韩 制服 | 欧美日韩国产高清 | 欧美中文字幕 | 国产精品美女久久久久久久网站 | 色婷婷精品 | 亚洲va欧美va天堂v国产综合 | 国产视频中文字幕 | 中文字幕一区二区三区四区五区 | 人人做人人澡人人爽欧美 | 美女久久久久久久久 |