从谷歌搜索页面下载图像然后将相同的图像保存到磁盘时,我遇到了一些问题。我在阅读同一图像时也遇到问题。
问题 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()
问题 2:(使用 PIL 模块打开下载的映像( 下一步是读取下载的图像,我使用"PIL"(枕头(模块来执行此操作。但我面临以下问题。 "哎呀。无法识别图像错误:无法识别图像文件<_io。BufferedReader name='path\1.jpg'>">
注意:如果我使用手动下载的图像或捕获的图像,我能够正确读取它们。
以下是我使用的代码:
from PIL import Image
img = Image.open(open(temp_file_path, "rb"))
我认为这是因为字节与字符串的转换问题,但我无法弄清楚
我正在使用请求模块附加通过脚本下载的图像以供参考。
有人帮助我真是太好了....
我看到的问题是该网址没有直接转到图像。我用image_url="https://i.etsystatic.com/16576605/r/il/ab973a/1811762786/il_794xN.1811762786_ni8d.jpg"
尝试了您的代码,一切都运行良好。
您可以使用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')
在线 IDE 中用于抓取和下载图像的代码和示例。
或者,您可以使用SerpApi的Google Images API来实现这一点。这是一个带有免费计划的付费 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 工作。