我是一个学习者,我在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)
答案 0 :(得分:1)
Content
的类型为bytes
,因此Content.find
的参数必须为bytes
或int
,而'<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())