首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不泄露信息的情况下从google下载图像,以及如何使用Python使用枕头模块读取图像

如何在不泄露信息的情况下从google下载图像,以及如何使用Python使用枕头模块读取图像
EN

Stack Overflow用户
提问于 2020-01-06 07:46:21
回答 2查看 254关注 0票数 0

当从google搜索页面下载图像时,我面临一些问题,然后将相同的图像保存到磁盘中。在阅读同样的图片时,我也面临着一些问题。

问题1:(下载图像并保存到磁盘)我使用“请求”模块下载映像。一旦下载了该图像,如果我试图打开它,它将显示下面的错误,而不是实际的图像内容(尝试了所有的图像格式,如jpg、png等)。“看来我们不支持这种文件格式”

注意:我也使用了urllib.requests模块下载图像,在这种情况下,我也面临着同样的问题。

下面是使用的代码:

代码语言:javascript
复制
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

注意:如果我使用手动下载的图像或捕获的图像,我能够正确地读取它们。

下面是我使用的代码:

代码语言:javascript
复制
from PIL import Image
img = Image.open(open(temp_file_path, "rb"))

我认为这是因为字节与字符串的转换问题,但我无法解决。

我是附加的图像,这是通过脚本下载,使用请求模块作为参考。

如果有人帮我会很好..。

EN

回答 2

Stack Overflow用户

发布于 2020-04-12 02:14:30

我看到的问题是,url不直接指向图像。我用image_url="https://i.etsystatic.com/16576605/r/il/ab973a/1811762786/il_794xN.1811762786_ni8d.jpg"尝试了您的代码,一切都很完美。

票数 0
EN

Stack Overflow用户

发布于 2021-10-29 09:35:47

您可以使用urllib.request.urlretrieve(URL, 'your_filename.mp3/jpeg/png/whatever'下载图像。

代码语言:javascript
复制
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并下载图像:

代码语言:javascript
复制
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')

代码和在线IDE中的示例,该IDE可以抓取和下载图像

或者,您可以通过使用来自Google图像API的SerpApi来实现这一点。这是一个有免费计划的付费API。

区别在于,你不需要处理从<script>标签中抓取数据,也不必想办法绕过Google或其他搜索引擎的块,因为它已经为最终用户完成了。

合并守则:

代码语言:javascript
复制
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工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59608393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档