使用 Python 抓取和下载 Google 图像

已发表: 2023-01-02

Web 抓取的日益普及大大增加了它的使用范围。 如今,许多人工智能应用程序定期向网络抓取数据集提供最新数据。 从目标网站到人工智能应用程序的数据集,数据有规律且不间断地流动。

相关文章:人工智能对客户成功未来的影响

图像处理是人工智能应用中最热门的领域之一。 图像处理是计算机科学的一个领域,专注于使计算机能够识别和理解图像和视频中的物体和人物。 与其他类型的人工智能一样,图像处理旨在执行和自动化复制人类能力的任务。 在这种情况下,图像处理试图同时复制人们的观看方式和他们理解所见内容的方式。

在许多领域,尤其是在图像处理项目中,算法开发和减少误差所需的数据都是通过网络抓取获得的。 在本文中,我们将开发一个在图像处理项目中经常使用的应用程序。 我们将使用 Python 编程语言抓取和下载 Google Images。 让我们开始吧。

项目设置

首先,让我们在桌面上打开一个文件夹。 让我们在此文件路径中打开一个终端,并通过运行以下命令安装必要的库。

pip 安装请求 bs4

安装必要的库后,让我们在文件夹中创建一个名为“index.py”的文件。

代码

让我们将以下代码粘贴到我们创建的“index.py”文件中。

导入请求、re、json、urllib.request
从 bs4 导入 BeautifulSoupheaders = {
“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36”
}queryParameters = {“q”:“marvel”,“tbm”:“isch”,“hl”:“en”,“gl”:“us”,“ijn”:“0”}

target_image_path = “.isv-r.PNCib.MSM1fd.BUooTd”
targetted_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = requests.get(“https://www.google.com/search”, params=queryParameters, headers=headers, timeout=30)
soup = BeautifulSoup(html.text, “lxml”)

google_images = []

def scrape_and_download_google_images():

images_data_in_json = convert_image_to_json()

matched_image_data = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

removed_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

matched_resolution_images = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, removed_matched_thumbnails)

full_resolution_images = get_resolution_image(匹配分辨率图像=匹配分辨率图像)

对于枚举(zip(soup.select(target_image_path),full_resolution_images),start = 1)中的索引,(image_data,image_link):

append_image_to_list(图像数据=图像数据,图像链接=图像链接)

print(f'{index}.图片开始下载')

下载图片(图片链接=图片链接,索引=索引)

print(f'{index}. 图片下载成功')

打印(f'抓取和下载的图像:{google_images}')

def remove_matched_get_thumbnails(matched_google_image_data):
返回 re.sub(
r'\[\”(https\:\/\/encrypted-tbn0\.gstatic\.com\/images\?.*?)\”,\d+,\d+\]', “”, str(matched_google_image_data ))

def get_resolution_image(matched_resolution_images):
返回 [
bytes(bytes(img, “ascii”).decode(“unicode-escape”), “ascii”).decode(“unicode-escape”) for img in matched_resolution_images
]

def convert_image_to_json():
all_script_tags = soup.select(“脚本”)
images_data = “”.join(re.findall(r”AF_initDataCallback\(([^<]+)\);”, str(all_script_tags)))
fixed_images_data = json.dumps(images_data)
返回 json.loads(fixed_images_data)

def append_image_to_list(图像数据,图像链接):
google_images.append({
“image_title”: image_data.select_one(targetted_image_base_html_path)[“title”],
“image_source_link”:image_data.select_one(targetted_image_base_html_path)[“href”],
“图片链接”:图片链接
})

def download_image(图像链接,索引):
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36')]
urllib.request.install_opener(开瓶器)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

scrape_and_download_google_images()

如果我们检查代码,让我们首先看一下具有静态值的字段。 以下字段定义为静态值。 我们使用 queryParams 变量指定要抓取和下载的图像的名称和属性。

另请阅读:ChatGPT – 对企业的影响

标题= {
“User-Agent”:“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36”
}queryParameters = {“q”:“marvel”,“tbm”:“isch”,“hl”:“en”,“gl”:“us”,“ijn”:“0”}target_image_path =“.isv- r.PNCib.MSM1fd.BUooTd”
targeted_image_base_html_path = “.VFACy.kGQAp.sMi44c.lNHeqe.WGvvNb”

html = requests.get(“https://www.google.com/search”, params=queryParameters, headers=headers, timeout=30)
soup = BeautifulSoup(html.text, “lxml”)

google_images = []

scrape_and_download_google_images()方法是流开始的地方。 目标图像被抓取,然后下载到我们指定的文件夹中。

def scrape_and_download_google_images():

images_data_in_json = convert_image_to_json()

matched_image_data = re.findall(r'\”b-GRID_STATE0\”(.*)sideChannel:\s?{}}', images_data_in_json)

removed_matched_thumbnails = remove_matched_get_thumbnails(matched_google_image_data=matched_image_data)

matched_resolution_images = re.findall(r”(?:'|,),\[\”(https:|http.*?)\”,\d+,\d+\]”, removed_matched_thumbnails)

full_resolution_images = get_resolution_image(匹配分辨率图像=匹配分辨率图像)

对于枚举(zip(soup.select(target_image_path),full_resolution_images),start = 1)中的索引,(image_data,image_link):

append_image_to_list(图像数据=图像数据,图像链接=图像链接)

print(f'{index}.图片开始下载')

下载图片(图片链接=图片链接,索引=索引)

print(f'{index}. 图片下载成功')

打印(f'抓取和下载的图像:{google_images}')

将抓取的图像下载到文件夹是在 download_image(image_link=image_link, index=index) 方法中完成的。 用这种方法抓取的图像保存在我们之前添加到项目文件位置的“Scraped_Images”中。

注意:在运行应用程序之前,在项目结构中创建“Scraped_Images”文件夹

def download_image(图像链接,索引):
opener=urllib.request.build_opener()
opener.addheaders=[('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36')]
urllib.request.install_opener(开瓶器)
urllib.request.urlretrieve(image_link, f'Scraped_Images/Image_{index}.jpg')

另请阅读:区块链即服务对企业的应用和好处是什么?

跑步

要运行该应用程序,让我们在文件位置打开一个终端并运行以下命令。

蟒蛇指数.py

应用运行后,应用的控制台打印如下信息。

1.镜像开始下载
1. 图片下载成功
2. 图片开始下载
2. 图片下载成功
3.镜像开始下载
3. 图片下载成功
4.图片开始下载
4. 图片下载成功
5.图片开始下载
5.图片下载成功
6.图片开始下载
6.图片下载成功
7. 图片开始下载
7. 图片下载成功
[…]
48.图片开始下载
48. image successfully downloaded抓取和下载的图片:
[
{
'image_title': '漫威漫画 – 维基百科',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Comics',
'image_link':'https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/Marvel_Logo.svg/1200px-Marvel_Logo.svg.png'
},
{
'image_title': '漫威宇宙 – 维基百科',
'image_source_link': 'https://en.wikipedia.org/wiki/Marvel_Universe',
'image_link': 'https://upload.wikimedia.org/wikipedia/en/1/19/Marvel_Universe_%28Civil_War%29.jpg'
},
{
'image_title':'Marvel.com | 漫威电影、角色、漫画、电视的官方网站',
'image_source_link': 'https://www.marvel.com/',
'image_link': 'https://i.annihil.us/u/prod/marvel/images/OpenGraph-TW-1200×630.jpg'
},
{
'image_title': '漫威娱乐 - YouTube',
'image_source_link': 'https://www.youtube.com/c/marvel',
'image_link': 'https://yt3.ggpht.com/fGvQjp1vAT1R4bAKTFLaSbdsfdYFDwAzVjeRVQeikH22bvHWsGULZdwIkpZXktcXZc5gFJuA3w=s900-ck-c0x00ffffff-no-rj'
},
{
'image_title': '漫威电影和节目 | 迪士尼+',
'image_source_link': 'https://www.disneyplus.com/brand/marvel',
'image_link':'https://prod-ripcut-delivery.disney-plus.net/v1/variant/disney/DA2E198288BFCA56AB53340211B38DE7134E40E4521EDCAFE6FFB8CD69250DE9/scale?width=2880&aspectRatio=1.78&format=jpeg'
},
{
'image_title': 'Marvel 新手入门 | 有线',
'image_source_link': 'https://www.wired.com/2012/03/an-intro-to-marvel-for-newbies/',
'image_link':'https://media.wired.com/photos/5955ceabcbd9b77a41915cf6/master/pass/marvel-characters.jpg'
},
{
'image_title': '如何按故事顺序观看每部漫威电影 - 游行:娱乐、食谱、健康、生活、假期',
'image_source_link': 'https://parade.com/1009863/alexandra-hurtado/marvel-movies-order/',
'image_link': 'https://parade.com/.image/t_share/MTkwNTgxMjkxNjk3NDQ4ODI4/marveldisney.jpg'
},
{
'image_title': '漫威漫画 | 历史、人物、事实和电影 | 大英百科全书',
'image_source_link': 'https://www.britannica.com/topic/Marvel-Comics',
'image_link': 'https://cdn.britannica.com/62/182362-050-BD31B42D/Scarlett-Johansson-Black-Widow-Chris-Hemsworth-Thor.jpg'
},
{
'image_title': '惊奇队长 (2019) – IMDb',
'image_source_link': 'https://www.imdb.com/title/tt4154664/',
'image_link':'https://m.media-amazon.com/images/M/MV5BMTE0YWFmOTMtYTU2ZS00ZTIxLWE3OTEtYTNiYzBkZjViZThiXkEyXkFqcGdeQXVyODMzMzQ4OTI@._V1_FMjpg_UX1000_.jpg'
},
[…]
]

让我们看看“Scraped_Images”文件来检查下载的图像。

Scraped Images

另请阅读:公司类型以及如何整合您的初创企业

结论

我们使用 python 抓取和下载了出于某种原因需要的 Google 图像。 如果您想在不编写任何代码的情况下从 Google 获取所需的图像,请探索 Zenserp API。 这是它不断更新的强大而精彩的文档。