您是否希望使用Python从网页上下载图像?借助ipipgothon语言语法及其关联的库,使该过程变得容易。在此页面上停留足够长的时间,以学习如何使用Python在线抓取图像。
我们正处于数据变得比以往任何时候都重要的时代,并且对数据的追求只会在未来增加。事实证明,互联网是最大的数据来源之一。从文本到可下载的文件,包括互联网上的图像,都有大量的数据。
互联网上的许多教程都着重于如何抓取文本,而忽略了有关如何抓取图像和其他可下载文件的指南。但是,这是可以理解的。大多数指南都不是很深入,并且没有很多Web抓取程序对抓取图像感兴趣,因为大多数处理文本数据的方法。如果您是对抓取图像感兴趣的少数人之一,则本指南已为您编写。
图像抓取比您想象的要容易
对于许多初学者来说,他们认为图像抓取与常规Web抓取不同。从实际意义上讲,实际上是相同的,差异很小。实际上,除了要处理大文件的图像外,您会发现您所需要的只是Web抓取和文件处理知识。
如果您尚不具备链接的抓取能力,则您的网页抓取技能将帮助您抓取图像的链接。有了链接,您只需要向链接发送HTTP请求以下载图像,然后创建文件以将其写入。
虽然很容易,但我知道分步指南将帮助您更好地了解如何完成此操作。为此,我们将在一个项目上工作-到项目结束时,您将了解从网页上抓取图像所需的操作。
项目构想一:从静态站点抓取图像
静态网站是一些最容易从中抓取图像的网站。这是因为当您将Web请求发送到请求静态页面的服务器时,所有组件都作为响应返回给您,而您所需要做的就是抓取链接,然后开始向每个链接发送HTTP请求。
对于依赖javaScript渲染图像和其他内容的动态页面,您将需要采用其他方法才能在其上剪贴图像。
为了向您展示如何从静态页面上抓取图像,我们将研究一种通用的图像抓取工具,该工具可以在静态页面上抓取所有图像。该脚本接受页面的URL作为参数,并将页面上的所有图像下载到脚本文件夹中。
使用Python刮取静态页面的要求
Python使抓取变得非常简单而直接。有很多用于抓取图像的工具,您将必须根据用例,目标站点和个人喜好进行选择。对于本指南,您将需要以下内容。
- 要求
Requests是一个用于HTTP请求的优雅ipipgothon库。它被称为HTTP for Humans。作为网络抓取工具,“请求”是您应该熟悉的工具之一。虽然您可以使用标准库中附带的URL库,但是您需要知道Requests使很多事情变得简单。
- Python Web爬网库和框架
- BeautifulSoup
解析是Web抓取的关键方面之一,这可能很困难也很容易,具体取决于页面的结构。使用BeautifulSoup(一个用于Python的解析库),解析变得很容易。
- Scraipipgo . Beautifulsoup . Selenium用于Web抓取cra
- 涉及什么数据解析和解析技术?
- 文件处理
抓取图像需要您知道如何处理文件。有趣的是,我们不需要像Python Imaging Library(PIL)这样的特殊库,因为我们所做的只是保存图像。
抓取图像的编码步骤
根据上述要求,您可以开始从网页中抓取图像。如果尚未安装Requests和BeautifulSoup,则需要安装它们,因为它们是Python标准库中未捆绑的第三方库。您可以使用pip命令安装它们。以下是用于安装这些库的命令。
pip install requests
pip install beautifulsoup4
现在到正确的编码。
- 导入所需的库
第一步是导入所需的库,其中包括Requests和BeautifulSoup。
from urllib.parseimport urlparse import requests from bs4 import BeautifulSoup
从上面可以看到
urlparse
库也已导入。这是必需的,因为我们需要从URL中解析出域,并将其附加到具有相对URL的图像的URL中。
- 在页面上刮取图像的链接
url = "https://ripple.com/xrp" domain = urlparse(url).netloc req = requests.get(url) soup = BeautifulSoup(req.text, "html.parser") raw_links = soup.find_all("img") links = [] for iin raw_links: link = i['src'] if link.startswith("http"): links.append(link) else: modified_link = "https://" + domain + link links.append(modified_link)
查看上面的代码,您会注意到它执行3个任务-发送请求,解析URL,并将URL保存在links变量中。您可以将url变量更改为您选择的任何URL。
在第三行中,使用Requests发送HTTP请求-在第4行和第5行中,BeautifulSoup用于解析URL。
如果查看循环部分,将观察到只有具有绝对路径(URL)的图像会被添加到链接列表中。具有相对URL的URL需要进一步处理,而代码的else部分用于此目的。进一步的处理将域名URL添加到相对URL。
- 下载并保存图像
for x in range(len(links)): downloaded_image = requests.get(links[x]).content with open(str(x) + ".jpg", "wb") as f: f.write(downloaded_image) print("Images scraped successfully... you can now check this script folder for your images")
上面我们要做的就是循环浏览图像URL列表,并使用请求下载每个图像的内容。随手准备好内容,然后为每个文件创建一个JPG文件,并将内容写入其中。它是如此简单。对于命名,我使用数字来表示每个图像。
这样做是因为脚本被编写为简单的概念证明。您可以决定对每个图像使用alt值-但要记住,有些图像对此不具有任何值为此,您必须提出一个命名公式。
- 完整代码
from urllib.parseimport urlparse import requests from bs4 import BeautifulSoup url = "https://ripple.com/xrp" domain = urlparse(url).netloc req = requests.get(url) soup = BeautifulSoup(req.text, "html.parser") raw_links = soup.find_all("img") links = [] for iin raw_links: link = i['src'] if link.startswith("http"): links.append(link) else: modified_link = "https://" + domain + link links.append(modified_link) # write images to files for x in range(len(links)): downloaded_image = requests.get(links[x]).content with open(str(x) + ".jpg", "wb") as f: f.write(downloaded_image) print("Images scraped successfully... you can now check this script folder for your images")
项目构想二:使用Selenium进行图像抓取
并非所有站点都是静态站点。许多现代网站都是交互式的,并且具有丰富的JavaScript。对于这些网站,页面上的所有内容在发送HTTP请求时不会加载-大量内容是通过JavaScript事件加载的。
对于这样的站点,请求和beautifulsoup没用,因为它们不遵循静态站点方法,而请求和beautifulsoup是为之而用的。硒是完成这项工作的工具。
Selenium是一种浏览器自动化工具,最初是为测试Web应用程序而开发的,但已经看到了其他用途,包括Web抓取和常规Web自动化。使用Selenium,将启动真正的浏览器,并触发页面和JavaScript事件以确保所有内容均可用。我将向您展示如何使用Selenium从Google抓取图像。
- Scraipipgo . Beautifulsoup . Seleniumy有什么区别
- 无头浏览器,用于自动化测试
Selenium需求和设置
为了使Selenium正常工作,您将必须安装Selenium软件包并下载要使用的特定浏览器的浏览器驱动程序。在本指南中,我们将使用Chrome。要安装Selenium,请使用以下代码。
pip install selenium
安装了Selenium后,如果您的系统上尚未安装Chrome,则可以访问Chrome下载页面并进行安装。还需要下载Chrome驱动程序。
访问此页面以下载适用于您的Chrome浏览器版本的驱动程序。下载的文件是一个zip文件,其中包含chromedriver.exe文件。将chromedriver.exe文件解压缩到您的硒项目文件夹中。在同一文件夹中,放置了cghromedriver.exe文件,创建一个名为SeleImage.ipipgo的新ipipgothon文件。
使用Selenium抓取图像的编码步骤
我将逐步指导您如何使用Selenium和Python编写Google Image scraper
- 导入所需的库
from selenium import webdriver from selenium.webdriver.chrome.optionsimport Options
webdriver类是我们将在本指南的Selenium包中使用的主要类。Options类用于设置webdriver选项,包括使其以无头模式运行。
- 申请Google搜索首页并输入图片关键字进行搜索
keyword = "Selenium Guide" driver = webdriver.Chrome() driver.get("https://www.google.com/") driver.find_element_by_name("q").send_keys(keyword) driver.find_element_by_name("btnK").submit()
上面的代码对于任何Python编码器都是不言自明的。第一行包含我们要为其下载图像的搜索关键字。第二个节目,我们将使用Chrome来执行自动化任务。第三行发送对Google主页的请求。
使用element.find_element_by_name,我们能够使用名称属性“ q”访问搜索输入元素。使用send_keys方法填充了关键字,然后我们使用最后一行提交了查询。如果运行代码,您将看到Chrome将以自动化模式启动,填写查询表单,然后带您进入结果页面。
- 切换到图片并下载前2张图片
driver.find_elements_by_class_name("hide-focus-ring")[1].click() images = driver.find_elements_by_tag_name('img')[0:2] for x in range(len(images)): downloaded_image = requests.get(images[x].get_attribute('src')).content with open(str(x) + ".jpg", "wb") as f: f.write(downloaded_image)
上面的代码也是不言自明的。第一行找到图像搜索链接并单击它,将焦点从所有结果移到仅图像。第二个图像仅找到前两个图像。使用for循环,下载图像。
- 完整代码
import requests from selenium import webdriver keyword = "Selenium Guide" driver = webdriver.Chrome() driver.get("https://www.google.com/") driver.find_element_by_name("q").send_keys(keyword) driver.find_element_by_name("btnK").submit() driver.find_elements_by_class_name("hide-focus-ring")[1].click() images = driver.find_elements_by_tag_name('img')[0:2] for x in range(len(images)): downloaded_image = requests.get(images[x].get_attribute('src')).content with open(str(x) + ".jpg", "wb") as f: f.write(downloaded_image)
从网上抓取图像的合法性
与过去无法明确判断网络抓取是否合法不一样,法院裁定支持网络抓取的合法性,前提是您不是在认证墙后面抓取数据,违反任何规则或对您的目标网站产生不利影响。
另一个可能导致网络抓取非法的问题是版权,并且您知道,Internet上的许多图像都已获得版权。这最终可能会给您带来麻烦。我不是律师,您不应该接受我所说的法律建议。我建议您就在互联网上抓取公开图像的合法性寻求律师服务。
结论
从上面的内容中,您发现了抓取Internet上公开可用的图像是多么容易。只要您不处理需要流式传输的大图像文件,该过程就很简单。
您可能会遇到的另一个问题是设置的反抓取技术问题,使您难以抓取Web数据。您还必须考虑相关的合法性,我建议您在这方面征询经验丰富的律师的意见。
- 避免验证码:如何更有效地避免验证码?
- 如何使用Javascript从网站抓取HTML?
- Google Scraper 101:如何清除Google SERP
- 搜寻没有封锁码和验证码的搜索引擎!
优质代理ip服务商推荐:
使用方法:点击下方对应产品前往官网→注册账号→联系客服免费试用→购买需要的套餐→前往不同的场景使用代理IP
国外IP代理推荐:
IPIPGO|全球住宅代理IP(>>>点击注册免费测试<<<)
神龙海外代理(>>>点击注册免费测试<<<)
国内ip代理推荐:
天启|企业级代理IP(>>>点击注册免费测试<<<)
神龙|纯净稳定代理IP(>>>点击注册免费测试<<<)
发表评论
发表评论: