从Google抓取src属性,仅使用漂亮的汤料

问题描述

我正在尝试抓取Google图片。当美丽的汤提取“ src”时,它输出链接 数据:图片/ gif; base64,R0lGODlhAQABAIAAAP /////// yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw == 这不是实际的图像。 脚本标签看起来经过了严格的编码,并且不包含实际的URI。 有人可以建议我解决方案吗?

实际上,这是最小数据URI,在解码时会产生1x1图像。我的问题是Google如何缩小完整的数据URI,以及如何访问完整的URI,以便获得实际的图片

解决方法

这是数据URL,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs

您可以解码base64字符串,然后保存到图像文件中。

,

这是Base64编码的图像。您可以将其保存到图像文件,例如:

src = "BASE64 DATA"
img = open("MyImage.gif","wb+")
img.write(src.decode('base64'))
img.close()
,

Google 图片从(谢天谢地)内联 JavaScript 插入到 DOM。打开任何查询的搜索结果页面源,复制图像 src 属性,然后在页面源中找到它。

要仅使用 bs4 提取它,您可以模拟浏览器并使用正则表达式从内联 JavaScript 中提取数据。

Page source of Google Images results for "stackoverflow" search query

或者,您可以使用 SerpApi 提取完整图像的 URI。这是一个付费 SaaS,提供免费试用。

使用 curl 的示例。

curl -s 'https://serpapi.com/search?q=coffee&tbm=isch'

Repl.it 上使用 google-search-results Python 包的示例。

from serpapi import GoogleSearch
import os

params = {
    "engine": "google","q": "coffee","tbm": "isch","api_key": os.getenv("API_KEY")
}

client = GoogleSearch(params)
data = client.get_dict()

print("Images results")

for result in data['images_results']:
    print(f"""
Position: {result['position']}
Original image: {result['original']}
""")

示例输出

Images results

Position: 1
Original image: https://upload.wikimedia.org/wikipedia/commons/4/45/A_small_cup_of_coffee.JPG


Position: 2
Original image: https://media3.s-nbcnews.com/j/newscms/2019_33/2203981/171026-better-coffee-boost-se-329p_67dfb6820f7d3898b5486975903c2e51.fit-1240w.jpg

检查 Google Images API on SerpApi website 的文档。

免责声明:我在 SerpApi 工作。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...