在当今信息爆炸的时代,经常需要从互联网上获取大量的数据,用于价格监控、丰富机器学习模型、金融数据聚合、监测消费者情绪、新闻追踪等多种用途。浏览器能够展示网站的数据,但是手动从多个来源复制数据到一个中心位置是非常繁琐和耗时的。网络爬虫工具本质上自动化了这一手动过程。
本文旨在让快速了解如何使用Python进行图片抓取。所谓的“网络爬虫”,也称为爬行或蜘蛛,是从在线源(通常是网站)自动收集数据的过程。虽然爬虫是在短时间内获取大量数据的好方法,但它确实会给托管源的服务器带来压力。这就是为什么许多网站完全禁止或限制爬虫的原因。然而,只要它不干扰在线源的主要功能,这种做法通常是可以接受的。
目标是为深度学习模型获取图像数据。这可能是任何东西,比如猫和狗的图像分类,或者使用图像对超级英雄进行分类。所有这些问题都需要大量的数据。有时有这些数据,有时没有。在这种情况下,可以轻松地从任何网站使用网络爬虫收集数据。
Selenium是一个开源的基于Web的自动化工具。Selenium主要用于行业内的测试,但也可用于网络爬虫。将使用Chrome浏览器,但可以尝试任何浏览器,几乎是一样的。SeleniumPython绑定提供了一个简单的API,用于使用SeleniumWebDriver编写功能/验收测试。通过Selenium Python API,可以以直观的方式访问Selenium WebDriver的所有功能。
SeleniumPython绑定提供了一个方便的API来访问Selenium WebDrivers,如Firefox、IE、Chrome、Remote等。目前支持的Python版本是3.5及以上。有关Selenium的更多信息,请查看其。
在了解了网络爬虫的基础知识之后,让深入代码部分。首先,建议为这个项目创建一个单独的环境,并且有一个IDE(如PyCharm)会是一个加分项。在激活环境后,首先需要安装所需的库。为此,只需在终端中输入以下命令,然后从下载文件:
pip install -r requirements.txt
现在打开IDE,按照以下步骤操作:
import os # 导入库
import time
import requests
from selenium import webdriver
上述代码行将导入所需的库。
以下是一个函数,用于获取图像URLs:
def fetch_image_urls(query: str, max_links_to_fetch: int, wd: webdriver, sleep_between_interactions: int = 1):
# ...函数实现...
这个函数接受4个参数:查询、要抓取的最大链接数、WebDriver路径和抓取两个图像之间的时间间隔。
构建Google查询:
search_url = "https://www.google.com/search?safe=off&site=&tbm=isch&source=hp&q={q}&oq={q}&gs_l=img"
加载页面:
wd.get(search_url.format(q=query))
‘get’方法将为给定的URL加载网页。
以下是抓取图像URLs的代码逻辑:
# ...代码逻辑...
下载和存储图像:
def persist_image(folder_path:str,url:str, counter):
# ...函数实现...
‘persist_image’函数用于从URL提取内容并将其存储到系统中。
以下是搜索和下载图像的函数:
def search_and_download(search_term: str, driver_path: str, target_path='./images', number_images=10):
# ...函数实现...