我试着从谷歌的列表(list_name)中获取一些图片(比如100张),但是我的代码只返回了20张,我不知道为什么。
下面是我的代码:
import os
import requests
from bs4 import BeautifulSoup
liste_name = ['blood orange','apple golden']
for name in liste_name:
name_splited = name.split(" ")
if len(name_splited) > 1:
full_name = name_splited[0] + "_" + name_splited[1]
path = "./Dataset/Trainset/" + full_name + "/"
name = name_splited[0] + "%" + name_splited[1]
url = "https://www.google.ch/search?site=webhp&tbm=isch&source=hp&q=" + \
name + "&oq=" + name + "biw=1280&bih=579&num=100"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
list_res_image = soup.find_all("img")
if not os.path.exists(path):
os.makedirs(path)
for index, lien in enumerate(list_res_image):
link = lien['src']
test = False
while not test:
try:
img = requests.get(link).content
test = True
except requests.exceptions.SSLError:
pass
with open(path + full_name + str(index) + ".png", "wb") as f:
f.write(img)
2条答案
按热度按时间uqxowvwt1#
谷歌API阻止你最多20张图片
有关详细信息,请参阅here
8gsdolmq2#
您可以使用
selenium
或playwright
来取得所有的影像。您也可以使用"ijn" URL parameter
来定义页码,例如0是第一页,1是第二页,依此类推。参数应该大于或相等0。但是,我们也可以通过内联JSON使用regular expressions对
BeautifulSoup
执行此操作。为了不对特定链接发出请求,您可以设置
parameters
,该值在后续搜索中始终可以更改:在正则表达式的帮助下,我们逐渐过滤掉内联JSON代码以查找图像结果:
online IDE
中的完整代码和示例输出示例
你也可以使用SerpApi的Google Images API。这是一个免费的付费API。不同的是它会绕过Google的块(包括CAPTCHA),不需要创建解析器和维护它。
要集成的示例:
输出量:
如果您需要更多的代码解释,可以参考Scrape and download Google Images with Python博客文章。
免责声明,我为SerpApi工作。