为什么“find”会产生字符串类型?

2024-07-04 14:12:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个学习者,我在Python3.7中工作。在

据我所知,find函数应该指示字符串的索引位置。在

当我的输入是一个像

myString='Blabla<body>blabla'.

现在

^{pr2}$

返回6。 令人惊叹的。 但是当我从网页导入字符串时,我得到了错误

TypeError: argument should be integer or bytes-like object, not 'str'

我完全同意,但我不明白为什么这个论点是str。在

我的代码:

import ssl, urllib.request
url = 'http://help.websiteos.com/websiteos/example_of_a_simple_html_page.htm'

response = urllib.request.urlopen(url)
Content = response.read()
startposition = Content.find('<body>')
print(startposition)

Tags: 函数字符串urlresponserequestbody学习者content
3条回答

Contentbytes类型,因此Content.find的参数必须是bytes或{},但是{}的类型是{}。所以,你的类型不匹配。在

如何修复:将str转换为bytes

Content.find(b'<body>')

I do not get why the argument is 'str' in the first place.

因为这就是您传递的:'<body>'是一个文本str对象。在您询问之前,Content是一个bytes对象,它必须被解码(使用应该在响应中声明的编码)以获得正确的字符串。在

现在一个更简单的解决方案是使用第三部分python请求库,它将为您处理这些烦人的细节,这是由urllib文档本身推荐的。在

另外,如果你想解析HTML,一定要使用一个合适的HTML解析器(beauthoulsoup是推荐的选择,如果你要处理可能格式错误的HTML,这是目前最常见的情况)。在

这里的内容是一个bytes对象。您试图通过bytes对象搜索字符串。通过更改行将内容转换为字符串

Content = response.read()

^{pr2}$

相关问题 更多 >

    热门问题