urllib 異常、cookie、handler及代理(四)

目錄

一、urllib異常?

二、urllib cookie登錄

三、urllib?handler 處理器的基本使用

四、urllib 代理和代理池

參考


一、urllib異常?

URLError/HTTPError

簡介:

1.HTTPError類是URLError類的子類

2.導入的包urllib.error.HTTPError? urllib.error.URLError

3.http錯誤:http錯誤是針對瀏覽器無法連接到服務器而增加出來的錯誤提示。引導并告訴瀏覽者該頁是哪里出了問題。

4.通過urllib發送請求的時候,有可能會發送失敗,這個時候如果想讓你的代碼更加健壯,可以通過try-except進行捕捉異常,異常有兩類URLError和HTTPError

完整代碼:

# 異常
# URLError/HTTPErrorfrom urllib.error import URLError
from  urllib.error import HTTPError
import urllib.request# 正確url
# url = 'https://blog.csdn.net/m0_45447650/article/details/1342414341'# 地址錯誤
url = 'https://blog.csdn.net/m0_45447650/article/details/1342414341'
# 主機名錯誤
# url = 'https://blob.csdn.net/m0_45447650'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}
try:# 請求對象定制request = urllib.request.Request(url, headers = headers)# 獲取網頁源碼response = urllib.request.urlopen(request)content = response.read().decode('utf-8')print(content)
except HTTPError:print('url地址寫錯了')
except URLError:print('url主機名錯了')

二、urllib cookie登錄

# 微博的cookie登錄
# 應用場景: 數據采集時,繞開登錄,進入到某個頁面

完整代碼:

# 微博的cookie登錄
# 應用場景: 數據采集時,繞開登錄,進入到某個頁面# 個人信息界面是utf-8,但還是報編碼錯誤,因為并沒有進入到個人信息頁面,而是跳轉到登錄頁面,登錄頁面不是utf-8,所以報錯。
# 什么情況下訪問不成功,請求頭的信息不夠才會訪問不成功
# refere :防盜鏈,判斷當前路徑是不是由上一個路徑進來的,一般情況下是做圖片的防盜鏈
import urllib.request
url = 'https://weibo.com/你的微博主頁'
headers = {"User-Agent": "主頁的UA",'Cookie':'主頁的CK','Referer':'https://weibo.com/'
}
request = urllib.request.Request(url, headers = headers)
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
with open ('weibo.html', 'w',encoding='utf-8') as file:file.write(content)

三、urllib?handler 處理器的基本使用

?為什么要學handler?

urllib.request.urlopen(url)

?????? 不能定制請求頭

urllib.request.Request(url,header,data)

?????? 可以定制請求頭

handler

?????? 定制更高級的請求頭(隨著業務邏輯的復雜,請求對象的定制已經滿足不了我們的需求(動態cookie和代理不能使用請求對象的定制))

使用handler三步:

1.獲取handler對象

2.獲取opener對象

3.調用open方法

完整代碼:

# 使用handler訪問百度,獲取網頁源碼import urllib.request
url = 'http://www.baidu.com'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}# 請求對象定制
request = urllib.request.Request(url, headers=headers)# handler build_opener open
# 1.獲取handler對象
handler = urllib.request.HTTPHandler()
# 2.獲取opener對象
opener = urllib.request.build_opener(handler)
# 3.調用open方法
response = opener.open(request)content = response.read().decode('utf-8')
print(content)

四、urllib 代理和代理池

?1.代理的常用功能?

(1).突破自身IP訪問限制,訪問國外站點

(2).訪問一些單位或團體內部資源

擴展:某大學FTP(前提是該代理地址在該資源的允許訪問范圍之內),使用教育網內地址段免費代理股務器,就可以用于對教育網開放的各類FTP下載上傳,以及各類資料查詢共亨等服務,

(3).提高訪問速度

擴展: 通常代理服務器都設置一個較大的硬盤緩沖區,當有外界的信息通過時,同時也將其保存到緩沖區中,當其他用戶再訪問相同的信息時, 則直接由緩沖區中取出信息,傳給用戶,以提高訪問速度,

(4).隱感真實IP

擴展:上網者也可以通過這種方法隱藏自己的IP,免受攻擊

2.代碼配置代理

創建Reuqest對象

創建ProxyHandler對象

用handler對象創建opener對象

使用opener.open函數發送請求

使用handler模擬客戶端向服務器發送請求

# handler build_opener open
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)

設置一個簡單的代理池

# 代理池
proxies_pool= [# 'key':'主機'+'端口號'{'http':'61.216.185.88:60808'},{'http':'182.140.244.163:8118'}
]
import random
proxies = random.choice((proxies_pool))

完整代碼

import urllib.request
url = 'https://www.baidu.com/s?wd=ip'
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}# 請求對象定制
request = urllib.request.Request(url, headers=headers)
# response = urllib.request.urlopen(request)# 獲取免費快代理 https://www.kuaidaili.com/free/
# 代理 ip 以字典的方式存在
proxies = {# 'key':'主機'+'端口號''http':'61.216.185.88:60808'
}"""
# 代理池
proxies_pool= [# 'key':'主機'+'端口號'{'http':'61.216.185.88:60808'},{'http':'182.140.244.163:8118'}
]
import random
proxies = random.choice((proxies_pool))
"""# handler build_opener open
handler = urllib.request.ProxyHandler(proxies=proxies)
opener = urllib.request.build_opener(handler)
response = opener.open(request)content = response.read().decode('utf-8')
print(content)
# with open ('weibo.html', 'w',encoding='utf-8') as file:
#     file.write(content)

參考

尚硅谷Python爬蟲教程小白零基礎速通(含python基礎+爬蟲案例)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211612.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211612.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211612.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

18 Java與redis集群的通信

1、引入依賴 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.6.3</version></dependency>2、配置 # Redis集群服務器地址 redis.nodesaliyun:6900,aliyun:6901,aliyun:6902,aliyun…

20道計算機網絡面試題

網絡分層 1、說說OSI 七層、TCP/IP 四層的關系和區別&#xff1f; OSI 七層從下往上依次是&#xff1a;物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層。一張圖給你整明白&#xff1a; TCP/IP 四層從下往上依次是&#xff1a;網絡接口層、網絡層、傳輸層、應用…

MATLAB - 評估擬合優度、評價擬合效果

系列文章目錄 文章目錄 系列文章目錄前言一、如何評估擬合優度二、擬合優度統計2.1 SSE - 誤差引起的平方和2.2 R 平方2.3 自由度調整 R 平方2.4 均方根誤差 三、MATLAB - 評估曲線擬合度3.1 加載數據并擬合多項式曲線3.2 繪制擬合方程、數據、殘差和預測范圍圖3.3 評估指定點3…

java--Object

1.Object類的作用 Object類是java中所有類的祖宗類&#xff0c;因此&#xff0c;java中所有類的對象都可以直接使用Object類中提供一些方法 2.Object類的常見方法 ①toString存在的意義&#xff1a;toString()方法存在的意義就是為了被子類重寫&#xff0c;以便返回對象具體的…

【Python實戰系列】一文徹底搞懂異常捕獲及處理(理論+源碼)

一、問題 異常處理是Python中一種用于處理程序運行時錯誤的機制。在編寫代碼時&#xff0c;可能會出現各種不可預測的情況&#xff0c;例如除零錯誤、文件不存在、網絡連接問題等等。為了確保程序能夠在出現錯誤時正常運行&#xff0c;您可以使用異常處理機制來捕獲和處理這些異…

K8S學習指南(5)-k8s核心對象namespace

文章目錄 前言什么是Namespace&#xff1f;Namespace的類型創建Namespace使用kubectl創建Namespace示例 切換Namespace查看Namespace在Namespace中部署應用程序使用Namespace進行資源隔離Namespace的權限控制刪除Namespace總結 前言 Kubernetes&#xff08;簡稱K8s&#xff09…

前端知識(十六)——js獲取時間戳方法

1、獲取當前時間 let date new Date() 2、將字符串或者對象直接轉化成時間戳 方法&#xff1a;Date.parse() 注意&#xff1a;不推薦這種方法&#xff0c;毫秒級別的數值被轉化為000 3、通過valueOf()函數返回指定的原始值獲得精準的時間戳值 方法&#xff1a;valueOf()…

git自動更新功能

確認權限 因為一般Linux系統網頁用的www 或 www-data用戶和用戶組,所以要實現自動來去,首先要在www用戶權限下生成ssh密鑰,不然沒有權限,其次就是,要把用root用戶拉去的代碼,批量改成www用戶 1. 給www權限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

memset的用法

語法 1.引用所需頭文件 #include<string.h> 2.聲明 void * memset ( void * ptr, int value, size_t num ); ptr 表示要設置的數據的起始地址。如果是要設置整個數組的數據&#xff0c;那ptr就是數組名&#xff08;數組首元素的地址&#xff09; value 表示要設置的值…

【學習筆記】lyndon分解

摘抄自quack的ppt。 這部分和 s a sa sa的關聯比較大&#xff0c;可以加深對 s a sa sa的理解。 Part 1 如果字符串 s s s的字典序在 s s s以及 s s s的所有后綴中是最小的&#xff0c;則稱 s s s是一個 lyndon \text{lyndon} lyndon串。 lyndon \text{lyndon} lyndon分解&a…

c++ 類和對象-封裝意義一

屬性和行為作為整體 示例一&#xff1a;設計一個圓類&#xff0c;求圓的周長 #include<iostream> using namespace std; //圓周率 const double PI 3.14; //設計一個圓類&#xff0c;求圓的周長 //圓求周長的公式&#xff1a;2*PI*半徑 //class代表設計一個類&#xf…

熔池處理Tecplot 360 和CFD-Post做出一樣的效果

熔池處理Tecplot 360 和CFD-Post做出一樣的效果 效果展示詳細講述Tecplot 360實現過程分析實現過程第一步實現過程第二步界面美化注意點效果展示 詳細講述Tecplot 360實現過程 分析 這里主要是將體積分數大于0.5的區域抽取出來,然后顯示溫度場,所以這里主要考慮下面連個思考…

PCL 三維點云中求解圓的三維方程

一、概述 在給出的三維點云中求解擬合圓的三維方程 二、代碼示例 #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/sample_consensus/ransac.h> #include <pcl/sample_consensus/sac_model_circle3D.h> // 擬

【貪心算法】 Opponents

這道題寫偽代碼就好了&#xff01; Description Arya has n opponents in the school. Each day he will fight with all opponents who are present this day. His opponents have some fighting plan that guarantees they will win, but implementing this plan requires pr…

【開源】基于Vue+SpringBoot的固始鵝塊銷售系統

項目編號&#xff1a; S 060 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S060&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S060&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 鵝塊類型模塊2.3 固…

Mybatis-plus中wrapper的區別

在MyBatis-Plus框架中,LambdaQueryWrapper 和 QueryWrapper 是用于構建查詢條件的兩個主要類。它們都是查詢條件構造器,用于在查詢中生成 WHERE 子句的條件。 QueryWrapper QueryWrapper 是 MyBatis-Plus 3.x 中引入的條件構造器。它的主要特點是使用字符串作為字段名,并支…

python 數字保留小數位數 結果是字符串

precision 2 f{px :.{precision}f} # 自定義動態 f{x:.2f} 數字 轉 字符串 保留dot后面的位數 結果 字符串

從關鍵新聞和最新技術看AI行業發展(2023.11.20-12.3第十一期) |【WeThinkIn老實人報】

Rocky Ding 公眾號&#xff1a;WeThinkIn 寫在前面 【WeThinkIn老實人報】旨在整理&挖掘AI行業的關鍵新聞和最新技術&#xff0c;同時Rocky會對這些關鍵信息進行解讀&#xff0c;力求讓讀者們能從容跟隨AI科技潮流。也歡迎大家提出寶貴的優化建議&#xff0c;一起交流學習&…

MySQL概述-安裝與啟動

數據庫相關概念 MySQL數據庫 下載地址 MySQL :: Download MySQL Installer (Archived Versions) 啟動方法 啟動密令&#xff1a;net start mysql80 停止密令&#xff1a;net stop mysql80 客戶端鏈接方法 注意用系統自帶的命令行工具執行指令需要設置環境在高級系統設置中…

解決使用pnpm安裝時Sharp模塊報錯的方法

在使用pnpm進行項目依賴安裝的過程中&#xff0c;有時候會遇到Sharp模塊報錯的情況。Sharp是一個用于處理圖像的Node.js模塊&#xff0c;但它的安裝可能會因為各種原因而失敗&#xff0c;導致項目無法正常啟動。本文將介紹這個問題的方法。 問題描述 解決方法 在命令行分別輸…