当从google搜索页面下载图像时,我面临一些问题,然后将相同的图像保存到磁盘中。在阅读同样的图片时,我也面临着一些问题。
问题1:(下载图像并保存到磁盘)我使用“请求”模块下载映像。一旦下载了该图像,如果我试图打开它,它将显示下面的错误,而不是实际的图像内容(尝试了所有的图像格式,如jpg、png等)。“看来我们不支持这种文件格式”
注意:我也使用了urllib.requests模块下载图像,在这种情况下,我也面临着同样的问题。
下面是使用的代码:
image_url = "https://www.google.com/imgres?imgurl=https%3A%2F%2Fi.etsystatic.com%2F16576605%2Fr%2Fil%2Fab973a%2F1811762786%2Fil_570xN.1811762786_ni8d.jpg&imgrefurl=https%3A%2F%2Fwww.etsy.com%2Flisting%2F676777770%2F8-styles-wood-acrylic-leather-endless&docid=Knls-viNHmqhZM&tbnid=WF4mlYC28VcOKM%3A&vet=10ahUKEwiB8v3NnezmAhWmzjgGHaWDCtIQMwgrKAAwAA..i&w=570&h=571&itg=1&bih=710&biw=1536&q=676777770&ved=0ahUKEwiB8v3NnezmAhWmzjgGHaWDCtIQMwgrKAAwAA&iact=mrc&uact=8"
with open(temp_file_path, "wb") as fil:
response = requests.get(image_url, stream=True)
response.raw.decode_content = True
shutil.copyfileobj(response.raw, fil)
fil.close()Issue2:(用PIL模块打开下载的图像)下一步是读取下载的图像,我已经使用了"PIL“(枕头)模块来完成此操作。但我面临以下问题。“name='path\1.jpg'>”:无法识别图像文件<_io.BufferedReader <_io.BufferedReader
注意:如果我使用手动下载的图像或捕获的图像,我能够正确地读取它们。
下面是我使用的代码:
from PIL import Image
img = Image.open(open(temp_file_path, "rb"))我认为这是因为字节与字符串的转换问题,但我无法解决。
我是附加的图像,这是通过脚本下载,使用请求模块作为参考。
如果有人帮我会很好..。
发布于 2020-04-12 02:14:30
我看到的问题是,url不直接指向图像。我用image_url="https://i.etsystatic.com/16576605/r/il/ab973a/1811762786/il_794xN.1811762786_ni8d.jpg"尝试了您的代码,一切都很完美。
发布于 2021-10-29 09:35:47
您可以使用urllib.request.urlretrieve(URL, 'your_filename.mp3/jpeg/png/whatever'下载图像。
import urllib.request
URL = "https://i.etsystatic.com/16576605/r/il/ab973a/1811762786/il_570xN.1811762786_ni8d.jpg"
urllib.request.urlretrieve(URL, "perfect_filename.png")有时它不会下载任何东西,因为请求是通过脚本(bot)发送的,如果您想解析来自谷歌图像或其他搜索引擎的图像,您需要先通过user-agent请求headers,然后再下载该图像,否则请求将被阻止并引发错误。
通过user-agent并下载图像:
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(URL, 'image_name.jpg')或者,您可以通过使用来自Google图像API的SerpApi来实现这一点。这是一个有免费计划的付费API。
区别在于,你不需要处理从<script>标签中抓取数据,也不必想办法绕过Google或其他搜索引擎的块,因为它已经为最终用户完成了。
合并守则:
from serpapi import GoogleSearch
import os
params = {
"api_key": os.getenv("API_KEY"),
"engine": "google",
"q": "pexels cat",
"tbm": "isch"
}
search = GoogleSearch(params)
results = search.get_dict()
for index, image in enumerate(results['images_results']):
print(f'Downloading {index} image...')
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.19582')]
urllib.request.install_opener(opener)
urllib.request.urlretrieve(image['original'], f'SerpApi_Images/original_size_img_{index}.jpg')免责声明,我为SerpApi工作。
https://stackoverflow.com/questions/59608393
复制相似问题