Python爬虫之网页图片抓取的方法

Python爬虫之网页图片抓取的方法

在Python爬虫中,网页图片的抓取是一项基本任务。下面介绍网页图片抓取的方法和实例。

1. 查找图片链接

在抓取图片前,需要先找到图片对应的链接。可以通过BeautifulSoup库和正则表达式进行图片链接的查找。

1.1 使用BeautifulSoup库查找图片链接

使用BeautifulSoup库可以方便地在网页中查找图片链接。下面是一个例子:

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = "https://example.com"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
img_links = []
for img in soup.findAll("img"):
    link = img.get("src")
    if link:
        if "http" in link:
            img_links.append(link)
        else:
            img_links.append(url + link)
print(img_links)

以上代码首先使用urlopen函数打开网页,然后使用BeautifulSoup库将网页内容转化为soup对象。接下来在soup对象中查找所有img标签,获取其中的src属性值,并将其添加到img_links列表中。

1.2 使用正则表达式查找图片链接

如果不能使用BeautifulSoup库,那么可以使用正则表达式进行图片链接的查找。下面是一个例子:

from urllib.request import urlopen
import re

url = "https://example.com"
html = urlopen(url)
img_links = re.findall('<img src="(.+?)"', html.read().decode())
img_links = [url + link if "http" not in link else link for link in img_links]
print(img_links)

以上代码首先使用urlopen函数打开网页,然后使用正则表达式查找img标签中的src属性值,并添加到img_links列表中。注意需要对非完整链接进行额外处理。

2. 下载图片

在获取到图片链接后,就可以使用Python下载图片。可以使用requests库或者urllib库进行图片的下载。

2.1 使用requests库下载图片

使用requests库可以方便地下载图片。下面是一个例子:

import requests

url = "https://example.com/image.jpg"
r = requests.get(url)
with open("image.jpg", "wb") as f:
    f.write(r.content)

以上代码首先使用requests库的get函数获取图片的二进制数据,然后使用with语句将二进制数据保存到文件中。

2.2 使用urllib库下载图片

使用urllib库可以通过urlretrieve函数下载图片。下面是一个例子:

from urllib.request import urlretrieve

url = "https://example.com/image.jpg"
urlretrieve(url, "image.jpg")

以上代码使用urlretrieve函数下载图片,并使用指定的文件名进行保存。

示例说明

现在有一个需要下载图片的网页,网页地址为 https://www.baidu.com/。我们想要下载该网页中所有的图片,并将其保存到本地。

使用BeautifulSoup库和requests库可以实现该功能。完整代码如下:

from urllib.request import urlopen
from bs4 import BeautifulSoup
import requests

url = "https://www.baidu.com/"
html = urlopen(url)
soup = BeautifulSoup(html, "html.parser")
img_links = []
for img in soup.findAll("img"):
    link = img.get("src")
    if link:
        if "http" in link:
            img_links.append(link)
        else:
            img_links.append(url + link)

for link in img_links:
    r = requests.get(link)
    with open(link.split("/")[-1], "wb") as f:
        f.write(r.content)

以上代码首先使用urlopen函数打开网页,然后使用BeautifulSoup库将网页内容转化为soup对象。接下来在soup对象中查找所有img标签,获取其中的src属性值,并将其添加到img_links列表中。最后使用requests库下载图片,并使用图片文件名进行保存。

使用正则表达式和urlretrieve函数可以实现该功能。完整代码如下:

from urllib.request import urlopen, urlretrieve
import re

url = "https://www.baidu.com/"
html = urlopen(url)
img_links = re.findall('<img src="(.+?)"', html.read().decode())
img_links = [url + link if "http" not in link else link for link in img_links]

for link in img_links:
    urlretrieve(link, link.split("/")[-1])

以上代码首先使用urlopen函数打开网页,然后使用正则表达式查找img标签中的src属性值,并添加到img_links列表中。最后使用urlretrieve函数下载图片,并使用图片文件名进行保存。

以上两个例子分别使用了不同的方式查找图片链接和下载图片,但其思路基本相同。在实际应用中,可以根据需要选择适当的方式进行编写。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python爬虫之网页图片抓取的方法 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python将内容进行base64编码与解码实现

    下面是对Python进行base64编码与解码的完整攻略: 1. Python base64编码方法简介 在Python中,base64编码是一个常用的编码方式,用于将二进制数据转换为可打印的ASCII码文本格式。base64编码的基本原理是将3个8位的字节转变为4个6位的字节,然后在每个6位字节前面添加两个0,使它变为8位的字节,最后将转换后的二进制数据进…

    python 2023年5月31日
    00
  • 150行Python代码实现带界面的数独游戏

    150行Python代码实现带界面的数独游戏 介绍 这是一个使用Python编写的数独游戏,具有可交互界面和提示功能。代码仅有150行,非常精简并易于理解。本攻略将详细讲解该游戏的实现过程和代码架构。 游戏实现过程 1.代码结构 该游戏主要由3个类组成: SudokuBoard:数独面板类,负责处理所有数独逻辑部分的功能,例如棋盘初始化、数字填充和检查答案。…

    python 2023年5月31日
    00
  • python字典排序的方法

    当我们使用Python开发一个复杂的应用程序时,经常需要对数据进行排序。Python中的字典是一种非常灵活的数据结构,它允许我们将数据保存为键-值对的形式,并使用键来访问值。但字典默认是无序的,我们需要进行排序才可以按照我们想要的顺序进行输出。下面是Python字典排序的方法攻略: 字典排序的方法 1. 使用sorted函数 可以使用Python内置的sor…

    python 2023年5月13日
    00
  • Python编程二分法实现冒泡算法+快速排序代码示例

    Python编程二分法实现冒泡算法+快速排序代码示例 本文将详细介绍如何使用Python编程实现二分法、冒泡算法和速排序算法,并提供两个示例说明。 二分法 二分法是一种常用的查找算法,它的基本想是将有序数组分成两部分,然后判断目标值在哪一部分中,从而缩小查找范围。下面是使用Python实现二分法的代码示例: def binary_search(arr, ta…

    python 2023年5月14日
    00
  • Python中的正则表达式与JSON数据交换格式

    以下是详细讲解“Python中的正则表达式与JSON数据交换格式”的完整攻略,包括什么是正则表达式、什么是JSON数据交换格式、如何使用正则表达式解析JSON数据、两个示例说明和注意事项。 什么是正则表达式 正则表达式是一种用于匹配字符串的模式。它是一种特殊的语法,可以用来描述字符串的特征。在Python中,我们可以使用re模块来操作正则表达式。 什么是JS…

    python 2023年5月14日
    00
  • 爬虫入门—-小说下载(静态网页的文字爬取)

    工具   Python3.6 + Requests + BeautifulSoup4  PS:点击 Requests 或 BeautifulSoup 可查看对应中文文档 任务   通过Python的爬虫下载一本小说。  此次爬取的网站为 http://www.kbiquge.com/ 分析   首先我们随便打开一个小说打开一章看看  如:斗罗大陆的 引子 穿…

    爬虫 2023年4月10日
    00
  • Android版微信跳一跳小游戏利用技术手段达到高分的操作方法

    Android版微信跳一跳小游戏高分攻略 1. 关于跳一跳小游戏 跳一跳是一款由微信推出的益智类小游戏,在微信中打开,点击某个对话框上的“跳一跳”即可进入游戏。游戏中,玩家需要控制角色在不同的盒子之间跳跃,并且在每个盒子上都需要收集星星,累计星星数即为得分。游戏的难点在于如何掌握跳跃的力度,在不同的盒子间跳跃需要使用不同的力度,才能够跳到恰好的位置。 2. …

    python 2023年5月23日
    00
  • python中带有直方图的高级掷骰子模拟器

    【问题标题】:advanced dice roll simulator w/ histogram in pythonpython中带有直方图的高级掷骰子模拟器 【发布时间】:2023-04-01 02:19:02 【问题描述】: 我正在编写一个程序,询问用户骰子的数量和骰子的边数。它计算每个值滚动了多少次,然后将它们放在一个列表中。然后我必须打印列表以及百分…

    Python开发 2023年4月8日
    00
合作推广
合作推广
分享本页
返回顶部