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

时间:2020-10-20 05:32:37

标签: python web-scraping beautifulsoup google-image-search

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

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

3 个答案:

答案 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 中提取数据。

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 工作。