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

时间:2019-01-18 15:59:51

标签: python python-3.x

我是一个学习者,我在Python 3.7中工作。

据我了解,find函数应该指示字符串的索引位置。

当我的输入是像这样的直线字符串时,便会这样做

myString='Blabla<body>blabla'.

现在

myString.find('<body>')

返回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)

3 个答案:

答案 0 :(得分:1)

Content的类型为bytes,因此Content.find的参数必须为bytesint,而'<body>'的类型为{ {1}}。因此,您有不匹配的类型。

如何解决:将str转换为str

bytes

答案 1 :(得分:1)

  

我不明白为什么参数首先是'str'。

因为这就是您传递的内容:'<body>'是文字str对象。在您问之前,Content是一个bytes对象,必须对其进行解码(使用应在响应中声明 的编码)才能获得正确的字符串。

现在,一个更简单的解决方案-由urllib文档本身推荐-使用第3部分python-requests lib,它将为您处理那些烦人的细节。

如果您想解析HTML,也一定要使用适当的HTML解析器(如果您必须处理格式错误的html,这是我们的建议选择,这是迄今为止最常见的情况)。

答案 2 :(得分:0)

这里的内容是一个字节对象。您正在尝试通过bytes对象搜索字符串。通过更改行

将内容转换为字符串
Content = response.read()

Content = str(response.read())