大家好,我是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,下篇继续完善!
好了,以上就是本期内容,咱们下期见。