仅使用美丽的汤从谷歌抓取 src 属性

我正在尝试抓取谷歌图像。虽然 beautiful soup 提取“src”,但它输出链接 data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw== ,这不是实际图像。脚本标记看起来经过大量编码,并且不包含实际的 URI。有人能给我建议一个解决方案吗?

实际上,这是缩小的数据 URI,解码后会生成 1x1 图像。我的问题是谷歌如何缩小完整的数据 URI 以及我们如何访问完整的 URI 以便我们可以获得实际的图像?


叮当猫咪
浏览 146回答 3
3回答

largeQ

这就是 Base64 编码的图像。您可以将其保存到图像文件中,例如:src = "BASE64 DATA"img = open("MyImage.gif","wb+")img.write(src.decode('base64'))img.close()

胡说叔叔

这是数据 URL,请参考https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs您可以解码 Base64 字符串,然后保存到图像文件。

偶然的你

Google 图片是从(幸运的是)内联 JavaScript 插入到 DOM 中的。打开任何查询的搜索结果的页面源,复制图像src属性,然后在页面源中找到它。要仅提取它bs4,您可以模仿浏览器并使用正则表达式从内联 JavaScript 中提取数据。或者,您可以使用 SerpApi 提取完整图像的 URI。这是一款可免费试用的付费 SaaS。示例用法与curl.curl -s 'https://serpapi.com/search?q=coffee&tbm=isch'Repl.itgoogle-search-results上 Python 包的使用示例。from serpapi import GoogleSearchimport osparams = {    "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 resultsPosition: 1Original image: https://upload.wikimedia.org/wikipedia/commons/4/45/A_small_cup_of_coffee.JPGPosition: 2Original image: https://media3.s-nbcnews.com/j/newscms/2019_33/2203981/171026-better-coffee-boost-se-329p_67dfb6820f7d3898b5486975903c2e51.fit-1240w.jpg
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python