python网页数据抓取(如何使用Python从网页上抓取图像所需的操作?)
优采云 发布时间: 2021-12-13 17:27python网页数据抓取(如何使用Python从网页上抓取图像所需的操作?)
你想用Python从网页下载图片吗?在 python 语言语法及其相关库的帮助下,这个过程变得容易。在此页面上停留足够长的时间以了解如何使用 Python 在线抓取图像。
我们正处于数据比以往任何时候都更加重要的时代,未来对数据的追求只会越来越大。事实证明,互联网是最大的数据来源之一。从文本到可下载的文件,包括 Internet 上的图像,都有大量的数据。
互联网上的许多教程都侧重于如何抓取文本,而忽略了有关如何抓取图像和其他可下载文件的指南。不过,这是可以理解的。大多数指南都不是很深入,并且没有多少网络爬虫对捕获图像感兴趣,因为大多数处理文本数据的方法。如果您是少数对抓取图像感兴趣的人之一,那么本指南就是为您编写的。
图像捕获比您想象的要容易
对于许多初学者来说,他们认为图像抓取与常规网页抓取不同。从实际意义上讲,它们实际上是相同的,几乎没有区别。事实上,除了处理大文件的图像,你会发现你所需要的只是网页抓取和文件处理的知识。
如果您还没有链接抓取能力,您的网络抓取技巧将帮助您抓取到图片的链接。有了链接,你只需要向链接发送一个 HTTP 请求来下载图片,然后创建一个文件来写入它。
虽然这很容易,但我知道分步指南将帮助您更好地了解如何完成此操作。为此,我们将开展一个项目——在项目结束时,您将了解从网页抓取图像所需的操作。
项目思路一:从静态站点抓取图片
静态 网站 是一些最容易从 网站 抓取图像的。这是因为当您向请求静态页面的服务器发送 Web 请求时,所有组件都会作为响应返回给您,您需要做的就是获取链接,然后开始向每个链接发送 HTTP 请求。
对于依赖 JavaScript 渲染图片等内容的动态页面,您需要采用其他方式在上面剪切和粘贴图片。
为了向您展示如何从静态页面中抓取图像,我们将研究一个通用的图像抓取工具,它可以抓取静态页面上的所有图像。该脚本接受页面的 URL 作为参数,并将页面上的所有图像下载到脚本文件夹中。
使用 Python 抓取静态页面的要求
Python 使爬行变得非常简单和直接。抓取图片的工具有很多,您必须根据您的用例、目标站点和个人喜好进行选择。对于本指南,您将需要以下内容。
Requests 是一个优雅的用于 HTTP 请求的 Python 库。它被称为人类的 HTTP。作为网络爬虫,“请求”是你应该熟悉的工具之一。虽然您可以使用标准库中收录的 URL 库,但您需要知道 Requests 使许多事情变得容易。
解析是网页抓取的关键方面之一,这可能很困难也很容易,具体取决于页面的结构。使用 BeautifulSoup(Python 的解析库),解析变得容易。
抓取图像需要您知道如何处理文件。有趣的是,我们不需要像 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")
项目思路2:使用Selenium进行图像捕捉
并非所有站点都是静态站点。许多现代 网站 是交互式的并且具有丰富的 JavaScript。对于这些网站,发送HTTP请求时页面上的所有内容都不会被加载——大量的内容是通过JavaScript事件加载的。
对于这样的站点,request和beautifulsoup是没有用的,因为它们不遵循静态站点方法,而使用request和beautifulsoup。Selenium 是完成这项工作的工具。
Selenium 是一种浏览器自动化工具,最初是为测试 Web 应用程序而开发的,但也有其他用途,包括 Web 抓取和通用 Web 自动化。使用 Selenium,将启动一个真正的浏览器并触发页面和 JavaScript 事件以确保所有内容都可用。我将向您展示如何使用 Selenium 从 Google 抓取图像。
硒要求和设置
为了使 Selenium 正常工作,您必须安装 Selenium 软件包并下载您要使用的特定浏览器的浏览器驱动程序。在本指南中,我们将使用 Chrome。要安装 Selenium,请使用以下代码。
pip install selenium
安装 Selenium 后,如果您的系统上没有安装 Chrome,您可以访问 Chrome 下载页面并安装它。您还需要下载 Chrome 驱动程序。
访问此页面以下载适用于您的 Chrome 浏览器版本的驱动程序。下载的文件是一个收录 chromedriver.exe 文件的 zip 文件。将 chromedriver.exe 文件解压到 selenium 项目文件夹中。在同一文件夹中,放置 cghromedriver.exe 文件并创建一个名为 SeleImage.py 的新 python 文件。
使用 Selenium 捕获图像的编码步骤
我将逐步指导您如何使用 Selenium 和 Python 编写 Google 图片抓取工具
from selenium import webdriver
from selenium.webdriver.chrome.optionsimport Options
webdriver 类是我们将在本指南的 Selenium 包中使用的主要类。Options 类用于设置 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()
上面的代码对于任何 Python 编码器都是不言自明的。第一行收录我们要下载图像的搜索关键字。在第二个程序中,我们将使用 Chrome 来执行自动化任务。第三行发送对 Google 主页的请求。
使用 element.find_element_by_name,我们可以使用名称属性“q”访问搜索输入元素。使用 send_keys 方法填充关键字,然后我们使用最后一行提交查询。如果你运行代码,你会看到 Chrome 会以自动模式启动,填写查询表单,然后带你到结果页面。
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 上获取公开可用的图像是多么容易。只要您不处理需要流式传输的大型图像文件,该过程就很简单。
您可能会遇到的另一个问题是反爬技术设置,这使您很难抓取网页数据。您还必须考虑相关的合法性。我建议你在这方面寻求有经验的*敏*感*词*的意见。
Python爬虫
喜欢 (0)
最佳代理
什么是替代数据及其对投资决策的有效性