嘟嘟社区

已解决-来个python指点下小弟,如何替换“数组”中的字符


本帖最后由 战神赵日天 于 2021-11-14 10:22 编辑

额,小弟py基础太弱鸡,百度和谷歌也找不到解决办法,故只能发到loc求教屌大的mjj

首先呢,我用以下代码获取一个页面的我需要的数据,这个数据是个数组格式,我获取的就是好几个同属性的数据

  1. s = re. compile (‘{‘ + ‘(.*?)’ + ‘}’,re.S).findall(str(response.content))

复制代码

然后数据出来显示

  1. [‘5220, \n                "name": 0\n              ‘, ‘2849, \n                "name": 0\n              ‘, ‘3630, \n                "name": 0\n              ‘, ‘4549, \n                "name": 0\n              ‘, ‘4745, \n                "name": 0\n              ‘, ‘4745, \n                "name": 0\n              ‘, ‘4745, \n                "name": 0\n              ‘, ‘4750, \n                "name": 0\n              ‘, ‘4750, \n                "name": 0\n              ‘, ‘4750, \n                "name": 0\n              ‘, ‘4750, \n                "name": 0\n              ‘, ‘4870, \n                "name": 0\n              ‘, ‘4848, \n                "name": 0\n              ‘, ‘4869, \n                "name": 0\n              ‘, ‘4929, \n                "name": 0\n              ‘]

复制代码

但是我需要整理这个数据,去掉空格,去掉\n
我尝试过使用replace,但是直接数组都不输出了,所以我也不知道咋办了,只能请教一下大屌们

loc上没法直接把刚随手写的发给你:您的请求带有不合法参数,已被网站管理员设置拦截!

可能原因:您提交的内容包含危险的攻击请求

如何解决:

1)检查提交内容;
2)如网站托管,请联系空间提供商;
3)普通网站访客,请联系网站管理员;

放图:

用循环,把列表中的每一个元素都replace一遍
本帖最后由 sRGB 于 2021-11-14 09:54 编辑

你抓的数据可能是二进制 b’str’   然后你显出输出不是原始数据,而且为了显示添加上了转移字符的 \n

r = requests.get(url=url, headers=headers)
html = r.text

使用 requests 抓取,应该使用 response.text 转换成字符串

你试试修改成  response.text 试试
response.text 返回的是一个 unicode 型的文本数据
response.content 返回的是 bytes 型的二进制数据

Floppy 发表于 2021-11-14 09:25
用循环,把列表中的每一个元素都replace一遍

大佬,帮人帮到底吧,稍微写几行,让小弟少走点弯路,多谢多谢

sRGB 发表于 2021-11-14 09:27
你抓的数据可能是二进制 b’str’   然后你显出输出不是原始数据,而且为了显示添加上了转移字符的 \n …

这个就更加高深了,我只想去掉空格,以及\n,至于数据原始的还是二进制的,可能还不在我目前考虑范畴

本帖最后由 sRGB 于 2021-11-14 09:40 编辑

response.text 与 response.content

在某些情况下来说,response.text 与 response.content 都是来获取response中的数据信息,效果看起来差不多。那么response.text 和 response.content 到底有哪些差别 ? 什么情况下该用 response.text 什么情况下该用 response.content ?

返回的数据类型
response.text 返回的是一个 unicode 型的文本数据
response.content 返回的是 bytes 型的二进制数据
也就是说如果想取文本数据可以通过response.text 如果想取图片,文件,则可以通过 response.content

数据编码
response.content 返回的是二进制响应内容
response.text 则是默认”iso-8859-1”编码,服务器不指定的话是根据网页的响应来猜测编码。

不用replace了

new_s = [item.strip() for item in s]

如果不行,查下strip的用法,去掉后面不想要的字符

sRGB 发表于 2021-11-14 09:27
你抓的数据可能是二进制 b’str’   然后你显出输出不是原始数据,而且为了显示添加上了转移字符的 \n

r =  …

好滴,感谢大佬指点,这个我的确需要注意,以及后续改进代码
恩,不过就算这样,应该获得的数据还是存在空格的,恩,还是要解决数组内替换空格
另外我有个疑问,能不能直接在获取的时候,就不获取空格以及n,这样不就行了嘛,有这样的功能嘛

Floppy 发表于 2021-11-14 09:37
loc上没法直接把刚随手写的发给你:您的请求带有不合法参数,已被网站管理员设置拦截!

可能原因:您提交 …

多谢大佬热心指点,小弟这就去修改测试,多谢多谢