pycharm 有沒有一種快捷鍵:將請求頭一鍵轉化為字典?

如上:

每當我想攜帶這麼大一串請求頭請求url時,ctrl+c,Ctrl+v 到pycharm 就會成這樣:

需要手動修改的地方太多了- - 傷神費時。

所以 有木有一種快捷鍵,可以一鍵將請求頭轉化為字典?或者只需要改動少量部分然後一鍵生成字典的小技巧?


該回答首發在公眾號:不二小段

首先回答題主的問題,PyCharm沒有這種快捷鍵。但是可以使用正則替換來做:

PyCharm中替換的快捷鍵是Ctrl+R,選中Regex正則模式

手擼正則,還是有點麻煩

好吧其實也就是兩行正則。

源匹配為 (.*): (.*)$

替換匹配為 "$1": "$2",

(……寫完檢查時才發現好像複製了個Response header,反正一個意思)

使用頻率不高的話,這種辦法還是不錯的,適用於熟悉正則熟悉IDE工具的同學。

其他方法的話,下面放全文:

如何優雅地複製請求頭

『回』字有四種寫法。

——魯迅

複製請求頭可以說是寫爬蟲代碼的一個日常操作了,雖然不是所有網站都會檢校請求頭中的欄位,但是如果遇到爬蟲無法正常返回網頁內容時,我們的第一反應依然是,加個headers試試——從最常見的UA,Host,到防盜鏈的Referfer,有時要添加cookie,等等。

如果我們能夠明確地知道,加上哪一個,或者哪兩個,甚至哪幾個欄位就能正確請求,那便也算了,偏偏有時沒辦法確定問題出在哪裡,最簡單粗暴的做法還是全寫上吧。

當我們通過任何方式抓到一個請求的時候,總是能看到請求頭的。但是用起來卻不太理想——在Python中,我們往往需要將headers寫成字典,這件事的畫風是這樣:

一團亂麻,不是嗎

那麼接下來怎麼做呢…?今天給大家總結總結幾種做法吧。

首先是朋友之前一篇推文中的兩個做法

法一,不夠優雅:

盜圖,來自爬蟲小工具-copyheader

這種做法顯然是最原始手工的做法了…

當然了…程序員遇到重複性的工作就總想造輪子…於是這篇推文的作者給大家提供了一個輪子,支持pip安裝…(pip install copyheaders)

用輪子的法二:

依然是盜圖,來自爬蟲小工具-copyheader

當然了,客觀地講,這種輪子也就自己寫代碼時用用,如果代碼要分享出去,無關的依賴還是少一些好…大家感興趣詳見 爬蟲小工具-copyheader

那麼我平時怎麼做呢?以下再介紹三種方法。

法三:藉助IDE的正則替換(PyCharm為例)

PyCharm中替換的快捷鍵是Ctrl+R,選中Regex正則模式

手擼正則,還是有點麻煩

好吧其實也就是兩行正則。

源匹配為 (.*): (.*)$

替換匹配為 "$1": "$2",

(……寫完檢查時才發現好像複製了個Response header,反正一個意思)

使用頻率不高的話,這種辦法還是不錯的,適用於熟悉正則熟悉IDE工具的同學。

法四:Chrome插件Postman

Postman是很強大的調試工具,但是目前Google已經放棄了Chrome App,目前在商店裡只能直接搜索到插件。

你可以安裝插件以後點擊鏈接獲取Postman App:

之後就是使用了。

單從我們今天的目的——複製headers來看,操作如下:

開啟Postman Interceptor,訪問的任意請求都會被Postman截獲。

在Postman點擊請求-Code-選擇Python-選擇相應方式即可。

可以看到Postman支持非常多種語言的導出

可以看到Postman的確是個非常強大的工具,甚至可以直接幫我們生成requests代碼了,而不僅僅是把headers轉化為字典…

但是呢,我個人感覺使用Postman來干這件事有種殺雞焉用牛刀的感覺。這款工具太重了…大家需要衡量學習成本,只做爬蟲而不做Web開發的話估計用的會少一些。另一方面就是可能依然有人有人沒辦法訪問Google…

所以,需要Postman的同學,可以在公眾號回復postman獲取下載鏈接~

法五:使用curlconverter

這是我自己發現的一個辦法,不需要軟體不需要插件,是一個網頁服務。

https://curl.trillworks.com/

使用這個方法前我們需要知道什麼是curl。

curl是Linux命令行下的文件傳輸工具,可以直接訪問URL,支持多種協議和參數設置甚至cookie設置。簡單來說,就是可以模擬一個請求。

Chorme瀏覽器的開發工具支持直接copy as curl,所以我們只需要這麼做:

在開發工具中選中請求copy as curl,然後粘貼到網站表單中,獲得Python代碼。

這個網站只支持Python、NodeJS和PHP

說實話…這種輕量級的方法是我最喜歡的一種…

好了,至此我們今天一共介紹了五種辦法。當然辦法絕對不止這五種。

雖然只是一個很小的功能,依然可以通過很多辦法來提高效率和生產力。雖然探索這些方法本身的意義猶如學習回字的四種寫法,但是其實每種方法背後都代表著一種工具,不管是造輪子,正則,Postman還是curlconverter功能都遠不止用來構造一下字典。

你現在用的是什麼辦法?看完這篇文章你決定選擇哪種辦法呢?留言告訴我吧~


這種格式可以不


試試這行代碼:

dict([[h.partition(:)[0], h.partition(:)[2]] for h in rawheaders.split(
)])

rawheaders就是你從瀏覽器中複製來的報頭字元串

用法示例:


應該是有的,我再某個視頻教程上看見過這種手法,但是不知道快捷鍵是啥。


講真,這個我還真沒有用過,因為我每次都是複製幾個headers,並不是全部。這個自己寫成dict也不是很費勁吧


這個視頻裡面有講:

列操作,IntelliJ IDEA神器使用技巧教程-慕課網


謝邀

看到題主的邀請消息的時候,我是懵逼的

我是誰我在哪我要幹什麼

這個P啥玩意請啥頭………

有沒有……

嗯……

有嗎?………

要不算了就說我不會?

那不行,簡直打臉有木有

再說我戲那麼足

直接認慫多難看

於是

「沒有」

 ̄へ ̄

字正腔圓

鏗鏘有力

不卑不亢

男兒本色

差點暴露了我對於這個問題一無所知的事實

還好我傲嬌

又機智


大兄弟你是真的懶,pycharm沒有,你試試用代碼吧 json


推薦閱讀:

《用python寫網路爬蟲》學習心得筆記
R學習整理筆記(二)——用rvest包爬取獵聘網數據【R Markdown呈現】
xpath+mongodb抓取伯樂在線實戰
【Python爬蟲】爬取教務處學生照片
一、Requests庫

TAG:Python | PyCharm | 網頁爬蟲 |