欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲之請求模塊urllib的基本使用

 更新時間:2022年04月08日 11:24:24   作者:hacker707  
urllib是python內置的HTTP請求庫,是一個用來處理網絡請求的python標準庫,下面這篇文章主要給大家介紹了關于python爬蟲之請求模塊urllib的基本使用,需要的朋友可以參考下

前言

??在實現網絡爬蟲的爬取工作時,就必須使用網絡請求,只有進行了網絡請求才可以對響應結果中的數據進行提取,urllib模塊是python自帶的網絡請求模塊,無需安裝,導入即可使用。下面將介紹如果使用python中的urllib模塊實現網絡請求??

urllib的子模塊

模塊描述
urllib.request用于實現基本HTTP請求的模塊
urllib.error異常處理模塊,如果在發(fā)送網絡請求的過程時出現錯誤,可以捕獲異常進行有效處理
urllib.parse用于解析URL的模塊
urllib.robotparser用于解析robots.txt文件,判斷網站是否可以爬取信息

HttpResponse常用方法與屬性獲取信息

通過urllib.request() 獲取的對象類型是HttpReponse,有以下幾種常用的方法,示例如下:

import urllib.request
# 定義一個url(你要爬取的網址)
url = 'https://www.baidu.com'
# 添加請求頭信息
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
# 創(chuàng)建Request對象
res = urllib.request.Request(url=url, headers=headers)
# 模擬瀏覽器向服務器發(fā)送網絡請求
response = urllib.request.urlopen(res)
# read()函數可以獲取響應,但返回的響應格式是二進制的,需要解碼
# 解碼:decode('編碼格式') 編碼格式在Response Headers,Content_Type里面查看
print('baidu官網HTML代碼如下:\n', response.read().decode('utf-8'))

# HTTPResponse這個類型
# 常見方法:read、readline、readlines、getcode、status、geturl、getheaders、getheader
# print(type(response)) # response是HTTPResponse的類型

# (1) 按照一個字節(jié)一個字節(jié)去讀
content = response.read()
print(content)

# 讀取具體的n個字節(jié),在read()函數中傳參即可
content2 = response.read(5)
print(content2)

# (2) 按行讀取,但是只能讀取一行
content3 = response.readline()
print(content3)

# (3) 按行讀取,并且讀取所有行
content4 = response.readlines()
print(content4)

# (4) 返回狀態(tài)碼的方法:200狀態(tài)碼沒有問題,其他的狀態(tài)碼可能有問題
print('響應狀態(tài)碼為', response.getcode())
print('響應狀態(tài)碼為', response.status)

# (5) 返回訪問的目標的url地址
print('響應訪問的url地址為', response.geturl())

# (6) 獲取的是響應頭所有信息
print('響應頭所有信息為', response.getheaders())

# (7)獲取響應頭指定信息
print('響應頭指定信息為', response.getheader('Content-Type'))

urlli.parse的使用(一般用于處理帶中文的url)

??使用urllib模塊向一個攜帶中文字樣的url發(fā)送請求時 ,會報錯:‘ascii’ codec can’t encode characters in position 10-11: ordinal not in range(128)??

字典格式的處理方式

步驟

(1)導入request和parse模塊

(2)添加請求頭header(重構ua)反反爬第一步

(3)使用urllib.parse方法處理url中的中文字樣(使用字典存儲要處理的內容,經過parse處理返回正常的url地址)

(4)使用+拼接固定的url地址和經過處理后的url地址

(5)創(chuàng)建請求對象

(6)使用urlopen()模擬瀏覽器像服務器發(fā)送網絡請求

(7)打印獲取響應對象里面的內容,并進行decode解碼

import urllib.parse  # 導入parse解析模塊
import urllib.request  # 導入request模塊

url = 'https://www.baidu.com/s?wd=酷我'
header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
# 通過urllib.parse處理url中的中文字樣--> 得到可以通過urllib發(fā)送請求的url地址
# 字典格式的處理方式
org = {'wd': '酷我'}
# 經過處理之后返回wd=%E9%85%B7%E6%88%9
result = urllib.parse.urlencode(org)
# 使用+拼接固定的url地址和經過處理的url地址
# https://www.baidu.com/s?wd=%E9%85%B7%E6%88%91
new_url = 'https://www.baidu.com/s?' + result

# 1、構造請求對象
res = urllib.request.Request(new_url, headers=header)
# 2、發(fā)送請求 獲取響應
response = urllib.request.urlopen(res)
# 3、獲取響應對象里面的內容(獲取網頁源碼)
print(response.read().decode('utf-8'))

字符串格式的處理方式

步驟

(1)導入request和parse模塊

(2)添加請求頭header(重構ua)反反爬第一步

(3)使用urllib.parse.quote方法處理url中的中文字樣(用一個變量存儲酷我字樣,使用parse.quote處理即可返回酷我經過處理的url地址)

(4)使用+拼接固定的url地址(需要加上wd=)和經過處理后的url地址(酷我字樣處理后的url地址)

(5)創(chuàng)建請求對象

(6)使用urlopen()模擬瀏覽器像服務器發(fā)送網絡請求

(7)打印獲取響應對象里面的內容,并進行decode解碼

import urllib.request
import urllib.parse

header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
}
# 第二種 字符串格式的處理方式
string_org = '酷我'
# %E9%85%B7%E6%88%91
string_result = urllib.parse.quote(string_org)

# 使用+拼接固定的url地址(需要加上wd=)和經過處理后的url地址
new_string_url = 'https://www.baidu.com/s?wd=' + string_result

# 1、構造請求對象
res = urllib.request.Request(new_string_url, headers=header)
# 2、發(fā)送請求 獲取響應
response = urllib.request.urlopen(res)
# 3、獲取響應對象里面的內容,并進行decode解碼
print(response.read().decode('utf-8'))

簡單了解web前端

HTTP基本原理

HTTP(HpperText Transfer Protocol),即超文本傳輸協(xié)議,是互聯網上應用廣泛的一種網絡協(xié)議。HTTP是利用TCP在Web服務器和客戶端之間傳輸信息的協(xié)議,客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務器,Web服務器發(fā)送被請求的信息給客戶端。

HTTP協(xié)議常用的請求方法

方法描述
GET請求指定的頁面信息,并返回響應內容
POST向指定資源提交數據進行處理請求(例如提交表單或者上傳文件),數據被包含在請求體中。POST請求可能會導致新的資源的建立、或已有資源的修改
GEAD類似于GET請求,只不過返回的響應中沒有具體的內容,用于獲取報文頭部信息
PUT從客戶端像服務器傳送的數據取代指定的文檔內容
DELEAE請求服務器刪除指定內容
OPTIONS允許客戶端查看服務器性能

HTML狀態(tài)碼及其含義

代碼含義
 信息,請求收到,繼續(xù)處理
2**成功,行為被成功地接受、理解和采納
3**重定向,為了完成請求必須進一步執(zhí)行的動作
4**客戶端錯誤,請求包含語法錯誤或者請求無法實現
5**服務器錯誤,服務器不能實現一種明顯無效的請求

瀏覽器中的請求與響應

??最好使用谷歌瀏覽器??

使用谷歌瀏覽器訪問baidu官網,查看請求和響應的具體步驟如下:

1在谷歌瀏覽器輸入網址進入baidu官網

2按下F12鍵(或單擊鼠標右鍵選擇”檢查“選項),審查頁面元素

3單擊谷歌瀏覽器調試工具中“Network”選項,按下F5 鍵(或手動刷新頁面),單擊調試工具中的“Name”欄目下的網址,查看請求與響應信息。

Genral

Geral概述關鍵信息如下:

Request URL:請求的URL網址,也就是服務器的URL網址

Request Method:請求方式為GET

Status Code:狀態(tài)碼為200,即成功返回響應。

Remote Address :服務器IP地址是39.156.66.14:443,端口號是443

?http的端口號是80,https的端口號是443?

Request Headers請求頭

Response Headers響應頭

?爬取baidu官網HTML源代碼?

添加請求頭信息(重構user_agent)

User-Agent(簡稱UA),記錄了操作系統(tǒng)的信息和瀏覽器的信息

以www.baidu.com為例演示

當不重構ua時,直接訪問網址,只會返回baidu的部分源碼,因為baidu識別出來我們是爬蟲

這時就需要重構ua,偽裝自己是瀏覽器發(fā)起請求

查看瀏覽器ua的方法 按F12鍵打開Network,在request headers里面就可以看到瀏覽器的ua.

創(chuàng)建Request對象

創(chuàng)建具有請求頭信息的Request對象,然后使用urlopen()方法向“baidu”地址發(fā)送一個GET請求,利用字典添加請求頭信息最常用的用法就是修改User-Agent來偽裝瀏覽器,例如
headers = {“user-agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36”
}表示偽裝成谷歌瀏覽器進行網絡請求,可以獲取baidu的全部源代碼

import urllib.request

# 請求對象的定制:為了解決反爬蟲的第一種手段
url = 'https://www.baidu.com'
# 用戶代理:UA
header = {
    'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
# urlopen()方法中不能傳參字典,因而用戶代理UA不能作為傳參傳入
# 此時需要定制一個請求對象:
# 如果request = urllib.request.Request(url,headers) 寫會報錯
request = urllib.request.Request(url, headers=header)
response = urllib.request.urlopen(request)
print('baidu官網HTML代碼如下:\n', response.read().decode('utf-8'))

??擴展知識??

1.使用with open 和 open保存圖片

import requests  # 導入requests模塊

# 找到目標圖片的url地址
url = 'https://c-ssl.duitang.com/uploads/blog/202107/26/20210726111411_b4057.jpg'
img_name = 'code.png'
res = requests.get(url)
# 保存圖片,音頻之類的,會使用wb ————>以二進制方式寫入
with open(img_name, 'wb') as file_obj:
    # 保存圖片,音頻之類的,會使用content去響應對象里面取
    file_obj.write(res.content)
import requests  # 導入requests模塊

url = 'https://c-ssl.duitang.com/uploads/blog/202008/12/20200812094028_qzhsq.jpg'
img_name = 'code2.png'
# 向目標網址發(fā)送網絡請求并賦給一個變量
res = requests.get(url)
# file_obj是一個文件對象
file_obj = open(img_name, 'wb')
file_obj.write(res.content)
# 用open寫入需要關閉
file_obj.close()

??with open和open兩者的區(qū)別??

with open會自動關閉,open則不會

2.使用urillib.request.urlretrieve() 函數保存圖片

import urllib.request  # 導入request模塊

# 找到目標圖片的url地址
url = 'https://c-ssl.duitang.com/uploads/item/201912/20/20191220140202_sbpjp.jpg'
# 給圖片命名
img_name = 'code3.png'
# 使用urllib.request.urlretrieve
urllib.request.urlretrieve(url, img_name)

??擴展??使用路徑保存圖片

from urllib import request  # 導入request模塊

url = 'https://c-ssl.duitang.com/uploads/blog/202102/14/20210214203011_1336a.jpeg'
# 傳入要保存的文件路徑(可copy path查看)  加r防止轉意
file_name = r'D:\web spider\request\code4.png'
request.urlretrieve(url, file_name)

??兩種導入方式??

import urllib.request(使用時需要urllib.request)

from urllib import request(使用時直接request即可)

總結

到此這篇關于python爬蟲之請求模塊urllib基本使用的文章就介紹到這了,更多相關python請求模塊urllib使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python3實現爬取指定百度貼吧頁面并保存頁面數據生成本地文檔的方法

    Python3實現爬取指定百度貼吧頁面并保存頁面數據生成本地文檔的方法

    這篇文章主要介紹了Python3實現爬取指定百度貼吧頁面并保存頁面數據生成本地文檔的方法,涉及Python基于urllib模塊的頁面爬取與文件讀寫相關操作技巧,需要的朋友可以參考下
    2018-04-04
  • python去除刪除數據中\(zhòng)u0000\u0001等unicode字符串的代碼

    python去除刪除數據中\(zhòng)u0000\u0001等unicode字符串的代碼

    這篇文章主要介紹了python去除刪除數據中\(zhòng)u0000\u0001等unicode字符串的代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python如何實現感知器的邏輯電路

    Python如何實現感知器的邏輯電路

    這篇文章主要介紹了Python如何實現感知器的邏輯電路,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • 自動化測試時基于Python常用的幾個加密算法總結

    自動化測試時基于Python常用的幾個加密算法總結

    這幾天做自動化測試,遇到一個問題,那就是接口的請求的密碼是加密的,產品的要求是不能使用使用其他特殊手段,他給提供加密算法,需要在接口請求的時候,使用加密算法處理后的數據傳參,本文主要是整理了幾個加密算法,以便后續(xù)測試使用,需要的朋友可以參考下
    2023-12-12
  • python3?chromedrivers簽到的簡單實現

    python3?chromedrivers簽到的簡單實現

    本文主要介紹了python3?chromedrivers簽到的簡單實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • python實現簡單井字棋小游戲

    python實現簡單井字棋小游戲

    這篇文章主要為大家詳細介紹了python實現簡單井字棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 解決Python中l(wèi)ist里的中文輸出到html模板里的問題

    解決Python中l(wèi)ist里的中文輸出到html模板里的問題

    今天小編就為大家分享一篇解決Python中l(wèi)ist里的中文輸出到html模板里的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • Python zip()函數用法實例分析

    Python zip()函數用法實例分析

    這篇文章主要介紹了Python zip()函數用法,結合實例形式較為詳細的分析了Python zip()函數的功能、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-03-03
  • python將控制臺輸出保存至文件的方法

    python將控制臺輸出保存至文件的方法

    今天小編就為大家分享一篇python將控制臺輸出保存至文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • windows下python安裝pip圖文教程

    windows下python安裝pip圖文教程

    這篇文章主要為大家詳細介紹了windows下python安裝pip圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論