gpt4 book ai didi

尝试打印页面中的所有链接时,Python 3.6 : TypeError: a bytes-like object is required, 而不是 'str'

转载 作者:太空狗 更新时间:2023-10-30 02:38:24 25 4
gpt4 key购买 nike

我正在参加一个针对初学者的 Python 在线类(class)。该类(class)解释了如何打印网页源代码中的所有链接。我使用 Notepad++ 编写了执行此操作的代码,然后将它们粘贴到 Python 解释器(Windows 上的 Python 3.6)中。

def get_next_target(page):
start_link=page.find('<a href=')
if start_link==-1:
return None,0
start_quote=page.find('"',start_link)
end_quote=page.find('"',start_quote+1)
url=page[start_quote+1,end_quote]
return url,end_quote

def print_all_links(page):
while True:
url,endpos=(get_next_target(page))
if url:
print(url)
page=page[endpos:]
else:
break

def get_page(url):
import urllib.request
return urllib.request.urlopen(url).read()

print_all_links(get_page('https://youtube.com'))

在我按下 Enter 后,我得到了这个:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 3, in print_all_links
File "<stdin>", line 2, in get_next_target
TypeError: a bytes-like object is required, not 'str'

我无法弄清楚我的代码有什么问题。

最佳答案

错误的出现是因为您调用了返回 bytes 对象的 urlopen.read。然后您尝试使用 str 搜索字符串搜索此字节串,这会导致错误。

幸运的是,修复非常小。调用 bytes.decodebytes 转换为 str 对象。

import urllib.request

def get_page(url):
url = urllib.request.urlopen(url)
return url.read().decode('utf-8')

此外,我建议在脚本顶部一次导入所有必需的模块。

关于尝试打印页面中的所有链接时,Python 3.6 : TypeError: a bytes-like object is required, 而不是 'str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47056068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com