Python的input()实现多行输入字符串转为列表,请求标头转换为python的字典格式

Scott0902 2022-11-08 04:24:21 阅读数:890

Pythoninput实现输入多行

在使用Python爬虫时需要设置请求标头(headers)来完全模拟一个浏览器进程访问网页,通常是设定一个字典格式的headers,内容是user-agent,比如:

headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'}

但在调试某些网站时的headers往往需要设置多行内容如cookie、referer、host等信息。首先你要在浏览器F12界面里复制请求标头信息,然后粘贴在Python代码里再逐行修改成字典格式,行数多的情况下还真麻烦。不如自己做一个自动转换headers为Python的字典格式的专用函数。

以前我对input()的印象是一次只能输入一行字符串,但经过实践,Python的input()可以做到接收多行文字信息。举个例子:

a=input()

就在你粘贴多行文字并且按回车键之后,多行文字信息被送进了缓冲区,这个a变量会先接收第一行字符串。

接下来,每次访问input()时赋值a=input(),这时的a变成了第二行;

再来一次a=input(),a值变成了第三行,如此类推。

我们可以对每次赋值给a之后做一个列表,将多行的字符串转为列表,列表的每一个元素对应一行字符串。那什么时候让a值知道输入的缓冲区已清空呢?我的想法是判断a的长度,只要是空字符串,len返回0,那就结束对a的赋值。

最后将列表转换为Python的字典格式。测试代码如下:

def my_header():
l=[]
print('请按Ctrl+V粘贴多行请求标头,然后按两下回车键:')
a=input()
l.append(a)
while 1:
a=input()
if len(a)<=0: # 如果是某一行是空字符则截止
break
else:
l.append(a)
h={}
for i in l:
aa=i.split(': ') # 注意冒号后面有一个空格
h.update({aa[0]:aa[1]})
return h
if __name__ == "__main__":
headers=my_header()
print(f'多行请求标头已转换为字典格式:\n{headers}')

运行代码,先粘贴请求标头的多行文字,按两下回车键(注意:是按两下,第二下的回车键是输入空字符,使代码判断多行文字已结束),然后自动输出字典格式的headers。

自编函数my_find()里分两个步骤:先接收多行字符串,然后转化为字典格式。这个函数可以优化一下,取消对列表的赋值,直接拆解字符串转换为字典:

def my_header():
h={}
a=input('请按Ctrl+V粘贴多行请求标头,然后按两下回车键:')
while len(a):
aa=a.split(': ') # 注意冒号后面有一个空格
h.update({aa[0]:aa[1]})
a=input()
return h
if __name__ == "__main__":
headers=my_header()
print(f'多行请求标头已转换为字典格式:\n{headers}')

我写这段代码没有引入其他库,仅仅用Python自带的函数简单地实现多行输入,有两个缺点待完善:

1、粘贴完多行文字之后必须敲两下回车键。

2、如果多行文字中间有空行,代码会认为多行文字已结束,后面的文字省略掉,而且被省略掉的文字仍留存于缓冲区,下次访问input()时仍能读取出来。

版权声明:本文为[Scott0902]所创,转载请带上原文链接,感谢。 https://blog.csdn.net/Scott0902/article/details/127742148