我需要访问一个HTML网站并在该网站上搜索图像。它可能不是那么漂亮,但我能够访问该网站,我只需要一些关于搜索IMG的最佳方法的指导。
我试图将其视为一个文件,但我收到一个错误,说我需要将数据转换为字节。
让我知道你的想法。
from urllib import request
import re
website = request.urlopen('https://www.google.com', "rb")
html = website.read()
hand = html.decode("UTF-8")
for line in hand:
line = line.rstrip()
if re.search('^img', line):
print(line)
TypeError:POST数据应该是字节,可迭代的字节或文件对象。它不能是str类型
我希望得到一份imgs列表
它可能不是那么漂亮,但我能够访问该网站..
实际上,由于错误来自调用访问网站的功能,您无法访问该网站。
您需要查看urllib.request.urlopen()
的函数签名。
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
在这行代码中:
website = request.urlopen('https://www.google.com', "rb")
...字符串'rb'
被解释为要在您的请求正文中发送的data
参数。这是因为你提供了2个位置参数,其中'rb'
是第二个,data
是函数签名中的第二个位置参数。
这是data
被允许的:
支持的对象类型包括字节,类文件对象和可迭代。
所以字符串'rb'
不是这些类型中的任何一种。
但这里真正的问题是你在猜测如何使用这个功能。 open()
内置功能和urllib.request.urlopen()
功能在操作方式上有很大差异,因此您需要阅读文档以了解如何正确使用它们。
另外,我想建议除非你绝对必须使用urllib
,否则请使用requests
库。
function urlopen
的签名是:
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
在你的代码中,urlopen('https://www.google.com', "rb")
将“rb”字符串设置为data
参数,而不是mode
参数另一个函数open
。