在Python中从google-images-download结果中检索图像URL

时间:2018-10-29 19:14:42

标签: python-3.x url

是否可以从from google_images_download import google_images_download response = google_images_download.googleimagesdownload() #class instantiation arguments = {"keywords" : 'stackoverflow', "limit" : 3, "print_urls" : True, "size" : ">2MP", } paths = response.download(arguments) https://github.com/hardikvasa/google-images-download)下载的图像中检索图像URL?

下面是一些示例代码:

main_op

它会打印:

  

项目号:1->项目名称= stackoverflow评估中...开始   下载...图片网址:   https://media.wired.com/photos/5926db217034dc5f91becd6b/master/w_1904,c_limit/so-logo-s.jpg   完成的图片====> 1. so-logo-s.jpg图片网址:   https://kaggle2.blob.core.windows.net/datasets-images/152/327/43994ab64328703c9e656b04e6769947/dataset-original.jpg   完成的图片====> 2. 2.dataset-original.jpg图片网址:   https://i.stack.imgur.com/alOyI.png完成的图片====> 3. aloyi.png

     

错误:0

paths变量方便地存储了下载文件的路径,我也想存储文件来自的URL,但是文档提供的唯一选择是打印它。是否有隐藏的方法来检索URL,还是可以捕获打印的输出?

3 个答案:

答案 0 :(得分:1)

我成功了。可能不是最干净的解决方案,但它可以工作。

from google_images_download import google_images_download 
import sys

orig_stdout = sys.stdout
f = open('URLS.txt', 'w')
sys.stdout = f

response = google_images_download.googleimagesdownload()

arguments = {"keywords"     : 'stackoverflow',
             "limit"        : 3,
             "print_urls"   : True,
             "size"         : ">2MP",
             }
paths = response.download(arguments)

sys.stdout = orig_stdout
f.close()

with open('URLS.txt') as f:
    content = f.readlines()
f.close()

urls = []
for j in range(len(content)):
    if content[j][:9] == 'Completed':
        urls.append(content[j-1][11:-1])   
print(urls)

答案 1 :(得分:0)

从@Vicky Christina的答案中脱颖而出,这是一个避免中间写入文件的Python 3解决方案:

from io import BytesIO, TextIOWrapper

from google_images_download import google_images_download
import sys


old_stdout = sys.stdout
sys.stdout = TextIOWrapper(BytesIO(), sys.stdout.encoding)


response = google_images_download.googleimagesdownload()

arguments = {
    "keywords": "stackoverflow",
    "limit": 3,
    "print_urls": True,
    "size": "large",
}
paths = response.download(arguments)

sys.stdout.seek(0)
output = sys.stdout.read()

sys.stdout.close()
sys.stdout = old_stdout

for line in output.split("\n"):
    if line.startswith("Image URL:"):
        print(line.replace("Image URL: ", ""))

答案 2 :(得分:-1)

在实践中实现一个好的解决方案是非常困难的。 这就是我们构建SerpAPI.com的原因!

这是一项网络服务,可以搜索Google图片并返回干净的json。它与大多数编程语言集成:python,php,java,golang,nodejs ...

https://serpapi.com/images-results

Google限制每天的搜索次数。但是此服务可提供无限搜索...