寫爬蟲如何讓 Headers 一鍵格式化

大家好,我是 kuls。

很久沒給大家寫文章了,6 月份開始一切恢復正常,會繼續寫更多的文章給大家。

在以前寫爬蟲的時候,有個事情很煩人,那就是處理一大堆的 Headers。

可能有部分小夥伴還不知道 Headers 是啥,Headers 就是請求頭的意思,當我們寫爬蟲去請求某些網頁時,需要攜帶請求頭,不然可能無法訪問。

按照正常操作,我們如何獲取請求頭呢?

我們抓取爬蟲時,打開開發者工具或者抓包工具就能夠看到 http 請求的請求頭信息。

每次複製走後,需要將其轉化成 json 的格式,如果一個一個去修改這就非常的麻煩了。(我以前就是手工改的,麻了)

那麼我們能不能寫個小工具來輔助我們一鍵轉化?

:authority: www.bilibili.com
:method: GET
:path: /?spm_id_from=444.41.b_696e7465726e6174696f6e616c486561646572.1
:scheme: https
accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
accept-encoding: gzip, deflate, br
accept-language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6

其實非常的簡單,我們複製瀏覽器或者抓包工具的請求頭時大致是上面那樣的。大致的思路就是將每一行的首部和尾部加上單引號,然後同時在尾部要加上逗號。

我們寫代碼來測試下

ret = ""
# 遍歷每一個字符
for c in headers:
# 如果是換行,就換成 ',\n'
  if c == '\n': 
    c = "',\n'"
  ret += c
# 將冒號變成  ':'
ret = re.sub(": ""': '", ret)

我們打印下 ret 看看結果

',
'accept-ranges': 'none',
'content-encoding': 'gzip',
'content-type': 'text/html; charset=utf-8',
'date': 'Tue, 31 May 2022 12:47:27 GMT',
'eagleid': 'd35bea2e16540012470177954e',
'etag': '"2b4a0-vmPJ+VGfNIiJYfpxd5oRkxAcDRw"',
'server': 'Tengine',
'server-timing': 'inner; dur=232, pp;dur=15, total;dur=224;desc="Nuxt Server Time"',
'timing-allow-origin': '*',
'vary': 'Accept-Encoding',
'via': 'cache26.cn4050[296,0]',
'x-powered-by': 'Express',
'x-tt-logid': '202205312047270102320161401A0336D3',
'x-tt-timestamp': '1654001247.265',
'x-tt-trace-host': '01b0ac3503025d9eeafc261cd112d3fdc6e159094a69db7fbd2554558314a40f27883b43867a0ddae1fa00946c0c6eef2443a58a1e427dfe2fdca0f5f267b023e095b72b4bb1d579868d5af536702455f85f40c03ee9bbd3b103948b987d7b54a9',
'x-tt-trace-tag': 'id=3;cdn-cache=miss',
'

可以看到得到了我們想要的,但是有一點點小細節沒有處理,就是整個字符串的頭部和尾部都有多餘的符號。

我們直接通過 ret[3: -3] 就可以處理了。

通過 print("{\n"+ret[3: -3] + "\n}") 這樣打印出來就是我們需要的效果。

知道了核心代碼怎麼做了,我們其實可以寫個小界面。GUI 或者 web 都可以,如果你想要看如何寫 GUI 可以給我點個贊,點贊超 20,下篇繼續完善!

好了,以上就是本期內容,咱們下期見。


歡迎加我微信交流學習

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/oiugh3NE_4rmebHaVcOAVw