我正在尝试抓取Google图片。当美丽的汤提取“ src”时,它输出链接 数据:图片/ gif; base64,R0lGODlhAQABAIAAAP /////// yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw == 这不是实际的图像。 脚本标签看起来经过了严格的编码,并且不包含实际的URI。 有人可以建议我解决方案吗?
实际上,这是最小数据URI,在解码时会产生1x1图像。我的问题是Google如何缩小完整的数据URI,以及如何访问完整的URI,以便获得实际的图片?
答案 0 :(得分:0)
这是数据URL,请参阅https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
您可以解码base64字符串,然后保存到图像文件中。
答案 1 :(得分:0)
这是Base64编码的图像。您可以将其保存到图像文件,例如:
src = "BASE64 DATA"
img = open("MyImage.gif","wb+")
img.write(src.decode('base64'))
img.close()
答案 2 :(得分:0)
Google 图片从(谢天谢地)内联 JavaScript 插入到 DOM。打开任何查询的搜索结果页面源,复制图像 src
属性,然后在页面源中找到它。
要仅使用 bs4
提取它,您可以模拟浏览器并使用正则表达式从内联 JavaScript 中提取数据。
或者,您可以使用 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 工作。