python 爬蟲一招解決SSl 報錯SSLError

2020-12-16 智眼視界

摘要

用python寫爬蟲的時候沒我們經常遇到https認證的網站,採用常用模塊requests模塊,我們一般在請求中將verify設置成假,免證書驗證,但是這些都是理想狀態,https請求很容易報錯,一旦報錯就難以解決。

舉個列子

編寫一個簡單的列子,我們的目標對象是一個https的網站,它的編碼是gb2312,按照常用手法,我們設置免驗證的方法,按照我們正常的邏輯,肯定是能成功,但是這裡卻不符合邏輯

簡單爬蟲案例

下面開始運行代碼:

異常報錯

報錯的信息,無非是ssl的各種報錯,我這裡是 Caused by SSLError(SSLError("bad handshake: SysCallError(-1, 'Unexpected EOF')",),),然今天今天要講的就是解決一切SSLError

解決思路

既然是http是認證出了問題,那麼我們就去修改代碼解決,代碼解決不了,我就讓第三方程序去解決,那這第三方軟體都屬於那些?很多,就是抓包軟體並且支持https,比如像fiddler什麼的軟體...這種法法的原理:就是一個代理伺服器原理,python寫的爬蟲會報錯,但代理伺服器不會報錯,所以我們這邊就是採用這樣的思路,不過是本地版的代理伺服器。

開始搭建

我這邊採用的抓包軟體是burpsuit,這是一款非常牛逼的抓包軟體,因為之前做滲透工作,所以burpsuit比較順手。burpsuit的其他用法,我們可以百度一下,burpsuit這個比較出名的,我們下載這個抓包軟體,然後設置他的證書(burpsuit抓https大家自行百度),讓他可以支持https抓包就可以了,burpsuit安裝前請安裝java的環境,他是用java的開發,下載下來後,我們啟動軟體,點擊proxy這個選項

burpsuit界面

然後我們點擊intercept is on 讓它變成off狀態,然後在點擊options,

burpsuit進入options

進入options,我們可以看見,我們現在的代理伺服器是127.0.0.1:8080

代理界面

burpsuit一打開默認就是127.0.0.1:8080,這樣就是一個簡單的代理伺服器。那麼我們在爬蟲中只要添加這個代理ip,就可以繞過ssl錯誤,當然你可以在瀏覽器internet設置成全局代理ip,這樣就不用修改代碼他也是成功的,我這邊修改了代理,大家可以看看是否成功:

修改代碼

給爬蟲添加代理

驗證方案

修改完爬蟲,我們點擊運行,效果是預想的一樣的的,完美解決了https產生的ssl認證的問題

正常返回源碼

後話

總的來說,這種方法可以搞定一切https的問題,但是有一個問題,一直困擾我好久,代理ip的問題,我在本地設置代理伺服器,代理的出口就是本地的ip,那麼一旦我訪問頻率過高,我的代理伺服器的ip也是會被封殺,所以這裡呢需要一個代理伺服器的二次代理的問題,貌似這個問題不太好解決;希望大家可以給一點思路解決這個問題,

有什麼問題與建議可以聯繫我chinapython@yeah.net

如果你感覺文章可以,盡情點讚!!!收藏!!!您的點讚是我前進的動力!!!

相關焦點

  • Python爬蟲 | 0x6 - 請求庫:urllib
    : <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)>
  • Python爬蟲核心模塊urllib的學習
    因為在玩Python challenge的時候,有用過這個模塊,而且學習這個模塊之後也對系統學習網絡爬蟲有用。
  • MongoDB安全實戰之SSL協議加密
    本文主要講述MongoDB的SSL協議加密的使用和配置的實戰經驗,非常值得一看。你也可以指定的值allowssl或preferssl建立混合模式使用SSL埠。·--sslPEMKeyFile 使用包含SSL證書和密鑰的PEM文件。
  • 以為部署上SSL證書就高枕無憂?你的SSL證書會過期!
    一、從身份驗證理解,一開始申請證書的時候會對該網站進行一次身份驗證,但是時間一長,網站信息的準確性卻難以得到保證,所以SSL證書有期限對驗證網站有幫助。  二、所處的安全環境時刻在變,SSL證書到期更換有利於更全面地保護網站安全。這跟我們設置銀行卡密碼,需要定期去更換密碼是一個道理。
  • 10分鐘生成一張永久免費的SSL證書
    現在講解一下,如何在centos作業系統下,獲得Lets Encrypt免費的ssl證書,並在nginx裡配置使用。1. 安裝Certbot客戶端Certbot是一個EPEL安裝包,如果沒有配置EPEL庫,需要提前將庫配置好。
  • PolarSSL 1.2.5 發布,SSL 加密庫
    上個版本是2013-01-25的1.2.4 越來越多的應用已經可以支持PolarSSLPolarSSL源碼,也許是最小巧的ssl代碼庫。高效、便於移植和集成。尤其適合嵌入式應用。完全改進:== Version 1.2.5 released 2013-02-02 Changes    * Allow enabling of dummy error_strerror() to support some use-cases    * Debug messages about padding errors during SSL message
  • 銳安信sslTrus 5年期證書訂閱套餐 簡化SSL證書管理
    由於全球SSL證書最長有效期縮短為一年,為了幫助客戶和合作夥伴簡化證書購買和管理流程,國產品牌銳安信sslTrus證書推出5年期證書訂閱套餐,省錢省力又省心!
  • 使用ssl_exporter監控K8S集群證書
    安裝apiVersion: v1kind: Servicemetadata:  labels:    name: ssl-exporter  name: ssl-exporterspec:  ports:    - name: ssl-exporter      protocol
  • 手把手教你使用Python網絡爬蟲獲取音效信息
    加個「星標」,每天一起快樂的學習 今 日 雞 湯 一腔熱血勤珍重,灑去猶能化碧濤。
  • PolarSSL 1.3.8 發布,SSL 加密庫
    For example contexts likessl_contextandctr_drbg_contextstill require amemset()initialization at the start, because there initialization functions (ssl_init()andctr_drbg_init()) can result in an error.
  • Ansblie-自動化IT資源管理工具(一)
    Ansible與其他軟體對比Ansible安裝部署、運行一、Ansible安裝/usr/bin/python_bakln -s /usr/local/bin/python2.7 /usr/bin/python8 測試 & 報錯[root@VM_131_252_centos Python-2.7.11]# python
  • PHP使用curl報錯SSL certificate problem: unable to get local...
    解決辦法有兩種方式:1.檢查你安裝的證書路徑看下跟你 curl 中使用的是否一致2.取消curl的ssl檢查沒有證書的話,可以在curl相關代碼中添加下面的代碼,表示不檢查ssl(這種方式一般用於本地調試
  • 這個Python框架你值得擁有!
    一、為什麼是FastApi?人們在介紹FastApi的時候通常會說「FastApi」是一個高性能的異步WEB框架。我相信沒有哪個程式設計師會跟「高性能」過不去,這往往也是我們所追求的東西。fastapi具有並發性能強、能夠快速上手、容錯能力強、自動生成交互式文檔的特點,這些都是我們選擇它的理由。
  • Python爬蟲利器一之Requests庫的用法
    註:Python 版本依然基於 2.7前言之前我們用了 urllib 庫,這個作為入門的工具還是不錯的,對了解一些爬蟲的基本理念,掌握爬蟲爬取的流程有所幫助。入門之後,我們就需要學習一些更加高級的內容和工具來方便我們的爬取。那麼這一節來簡單介紹一下 requests 庫的基本用法。
  • 如何應對偽造的 SSL 證書?
    編譯自:http://thehackernews.com/2016/04/ssl-certificate-transparency.html
  • Python爬蟲之urllib庫—爬蟲的第一步
    爬蟲的過程亦是如此,通過對伺服器發出請求得到HTML網頁,然後對下載的網頁進行解析,得到我們想要的內容。當然,這是一個爬蟲過程的一個概況,其中還有很多細節的東西需要我們處理的,這些在後續會繼續與大家分享。 了解了爬蟲的基本過程後,就可以開始我們真正的爬蟲之旅了。
  • 如何用Python發送定時郵件?
    Python 發送定時郵件的小技巧 之前接了一個爬蟲的小項目,需要每天將數據發送到客戶的郵箱中,每天都登錄伺服器下載數據十分麻煩,因此就用 Python 配合 Windows 系統自帶的任務計劃,每天上午 10:00 定時將當天的數據發到客戶郵箱中。
  • Python——網絡爬蟲、登錄、代理設置
    一、cookie和sesson1、什麼是cookie和sessioncookie:cookie是網站用來辨別用戶身份,進行會話跟蹤,存儲在本地終端上的數據。session:session(會話)本來含義是指有始有終的一系列動作和消息。
  • PolarSSL 1.3.0 發布,SSL 加密庫 - OSCHINA - 中文開源技術交流社區
    Check out the documentation forssl_set_own_cert()for more details.If you want to uses the PSK-based ciphersuites, you will need to pass a pre-shared secret to the SSL layer usingssl_set_psk().