许多产品所有者需要进行图片抓取以进行列表管理或产品研究。有时候,这项任务需要从各种网站收集数千张图片。显然,手动下载并不是解决方案。那些允许下载所有图片的工具也不太好用,因为它们会收集所有图片文件,包括不相关的网站标志和缩略图。
使图片抓取快速便捷的唯一方法是使用专门的抓取工具。然而,这也意味着你将面临另一个挑战:几乎所有网站都安装了反抓取工具。提示:这将需要使用代理网站。那么,如何应对限制、快速收集数据,并最终使事情尽可能简单呢?让我们来理清一下。
图片抓取是如何工作的?
简而言之,抓取图片意味着从网站提取图片 URL。例如,如果你需要来自 Google 搜索的图片池,则需要访问每个图片源并下载它们。相反,你可以抓取 Google 图片并自动执行该过程。
当你需要从特定来源获取图像链接时,你需要打开网站的 HTML 代码并从中复制链接 — 如下所示:

当你抓取图像时,你可以自动执行此任务并更快地从网站获取图像。
图片抓取工具
解析数据(包括来自网站的图片)的最简单方法是选择现成的图片抓取解决方案。有许多免费和付费工具需要最低限度的技术技能。然而,它们要么需要每月付费,要么有特定的限制——换句话说,它们不是那么通用。
作为替代方案,你可以使用 Python 库和工具从网站上抓取 png 图像(或其他格式)。虽然这看起来不像在现成的工具中单击几个按钮那么简单,但 Python 被认为是解析数据的最流行和最方便的选项之一。它可以抓取你需要的几乎任何内容,而不像现成的解决方案不需要编程技能。让我们深入了解如何处理这两个选项。
如何使用现成的工具从网站上抓取图片
这里的主要挑战是选择最合适的一个:它们可能因用途而异。以下是最流行的图像抓取工具:
Scraping Bot

此工具可让你为特定行业选择最合适的 API。该工具对于为电子商务抓取图像和其他数据非常方便。你可以从各种计划中进行选择,包括免费计划:它允许你创建五个并发请求、执行 JS 渲染(无头 Chrome)并使用高级代理。
ScrapeWorks

ScrapeWorks 为各行各业的大型企业提供定制解决方案。使用其工具,你可以从各种网站抓取图像并将其保存为所需的任何格式:JSON、Excel、XML、CSV 等。它适合不同的行业,尤其适用于电子商务、房地产、医疗保健和汽车。保护方法可准确与目标网站配合使用,并巧妙地克服了限制。ScrapeWorks 不会公布其定价计划,并根据要求提供服务。
ScraperAPI

Scraper API 是一款开箱即用的工具,可自动执行整个过程,并使用顶级代理和反机器人检测。它允许你从多种设置中进行选择,包括 IP 地理位置。要开始使用它,你需要使用 API 密钥分享你需要抓取的网站的 URL。你将找到有关如何安装 ScraperAPI 和根据需要对其进行自定义的非常详细的说明。
ParseHub

ParseHub 是新手最容易使用的工具之一。它不需要任何复杂的设置,只需单击图像即可解析图像。定价计划根据你的需要而有所不同。例如,免费版本允许你在 40 分钟内从最多 200 页获取数据并创建五个公共项目。还有每月 189 美元和 599 美元的计划,以及根据要求以特定价格提供的企业解决方案。
如何使用 Python 从网站抓取图片
当你需要的功能比现成工具所能提供的更多时,编程抓取可以帮到你。对于熟悉 Python 的人来说,这相当容易,但对于初学者来说就不是那么容易了。要使用 Python 进行抓取(从 URL 获取图像,就像使用以前的工具一样),你需要具备特定的技能和知识。
此外,使用 Python 从网站抓取图像的方法有很多:你可以使用各种库、脚本和工具。以下是最受欢迎的:
- BeautifulSoup和 lxml 库。最适合解析 HTML 和 XML
- Scrapy 框架。专为网页爬取和提取网站数据(包括网页图片)而创建的免费框架。
在这篇评论中,我们将展示使用 BeautifulSoup 库的最流行和最简单的抓取方法之一。以下是分步教程:
步骤1.导入所需的库:
from bs4 import BeautifulSoup
import requests
步骤2:创建请求,以便 Beautiful Soup 可以解析所需的页面:
html_page = requests.get(‘http://yoursite.com/’)
soup = BeautifulSoup(html_page.content, ‘html.parser’
warning = soup.find(‘div’, class_=”alert alert-warning”)
book_container = warning.nextSibling.nextSibling
步骤3. 指示图像标签以仅提取图片:
images = book_container.findAll(‘img’)
example = images[0]
example
步骤 4. 结果,你将获得如下图像 URL:
<img alt=”A Light in the Attic” class=”thumbnail” src=”media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg”/>
步骤 5. 提取 URL:
example.attrs[‘src’]
You will get the following output:
‘media/cache/2c/da/2cdad67c44b002e7ead0cc35693c0e8b.jpg’
步骤 6.使用 Python 的 Shutil 包从 url 请求下载图像:
url_base = “http://yoursite.com/” #Original website
url_ext = example.attrs[‘src’]
full_url = url_base url_ext
r = requests.get(full_url, stream=True)
if r.status_code == 200: #200 status code = OK
with open(“images/book1.jpg”, ‘wb’) as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
步骤 7. 创建图像预览以查看你是否下载了所需内容。它将需要导入两个名为 matplotlib.pyplot 和 matplotlib.image 的额外包:
import matplotlib.pyplot as plt
import matplotlib.image as mpim
The code for image previews will look the following:
img = mpimg.imread(‘images/book1.jpg’)
imgplot = plt.imshow(img)
plt.show()
结果,你将看到提取的图像。请注意,此方法仅允许你提取静态页面,并且你需要更复杂的方法来处理交互式网站。总的来说,你可以使用其工具和你的编程技能创建任何自定义的 Python 图像抓取工具。
为什么需要代理来抓取数据
图像或任何其他内容的 Web 抓取始终与代理相关。为什么会这样?事实上,抓取并不是网站所有者欢迎的事情。谁愿意向竞争对手提供完整的数据以供其进行营销研究?这就是为什么大多数网站(尤其是电子商务行业的网站)都受到严格保护以防止 Web 抓取。
因此,当你运行抓取机器人时,可能会导致失败:网站的保护将阻止你的工具,不允许你抓取任何内容。唯一的出路是使用代理进行抓取,它可以隐藏你的活动并轻松提取你进行营销研究所需的图像、价格和其他信息。
- 代理将有助于管理地理限制。如果网站内容在你所在地区不可用,你可以通过代理更改你的地理位置。
- 代理可以隐藏你的 IP。当你从你的 IP 向某个网站发出过多请求时,该网站可能会因请求限制而阻止你。抓取代理会隐藏你的 IP 并执行尽可能多的请求,以实现高效抓取。
当你使用现成的工具时,以及为 Python 编写脚本时,你可以使用代理进行图像抓取。
提示:请谨慎使用代理网站。免费代理网站并不总是提供如你所愿的代理,因此我们建议你使用高质量的付费选项。尝试选择可靠的代理网站,这些网站应具有正面评价和适中的价格。此外,请确保代理网站提供一些额外选项,例如对无法正常工作的代理提供退款。
总 结
网页抓取可能具有挑战性,尤其是当你抓取 PNG 和 JPG 文件时。不过,如果你使用正确的工具,并了解非编程和编程抓取的方方面面,这将使你的工作变得更加轻松。结合合适的网页抓取工具和顶级代理,将确保工作顺畅高效。