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线程池threadpool实现篇

    下面是“Python线程池ThreadPool实现篇”的完整攻略。 线程池的概念 线程池是由多个线程构成的线程组。在实际应用中,使用线程池的好处是可以重用已创建的线程,减少创建和销毁线程的开销。线程池中包含一个任务队列和多个线程,任务队列中的任务可以由任意一个线程来执行,执行完成后线程并不会销毁,而是继续等待任务队列中的新任务。 Python的标准库thre…

    python 2023年5月13日
    00
  • Redis 如何实现分布式计数器?

    以下是 Redis 如何实现分布式计数器的完整使用攻略。 Redis 分布式计数器简介 在分布式系统中,为了保证数据的一致性和正确性,需要使用分布式计数器控制并发访问。Redis 作为一种高性能的存储数据库,可以很好地实现分布式计数器。 Redis 分布式计数器的实现原理是利用 Redis 的 INCRBY 命令,该命令可以在 Redis 中对一个键值进行原…

    python 2023年5月12日
    00
  • 爬虫笔记(二):爬取药监局所有详情页数据

    药监局网址:http://scxk.nmpa.gov.cn:81/xk/ 药监局首页:       详情页:      目的:爬取药监局所有详情页信息,保存在本地,以csv文件格式保存。 分析主页:        主页的response返回内容中,包含了这一页中的所有企业的id 修改网页参数page可以实现翻页      所以首先要通过访问主页,获取所有企业…

    2023年4月10日
    00
  • Python 常用string函数详解

    Python 常用string函数详解 在 Python 中,字符串是一个非常重要的数据类型,经常会用到与字符串相关的操作。本文将介绍一些常用的字符串函数,包括: len():用于获取字符串的长度 split():用于将字符串拆分成多个子串 join():用于将多个子串拼接成一个字符串 replace():用于替换字符串中的某些字符 startswith()…

    python 2023年6月5日
    00
  • Python字典和列表性能之间的比较

    Python中的字典和列表是常用的数据结构之一,两者在使用场景、功能和性能上有很大的区别。本文将详细讲解Python字典和列表性能之间的比较,为读者提供完整的攻略。 一、Python字典与列表的定义 1.1 Python字典的定义 Python字典是一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,每个对…

    python 2023年5月13日
    00
  • 如何使用 Redis 的事务来保证原子性?

    以下是详细讲解如何使用 Redis 的事务来保证原子性的完整使用攻略。 Redis 事务简介 Redis 事务是 Redis 中的一种机制,用将多个 Redis 命令打包成一个原操作。Redis 事务可以保证多 Redis 命令的原子性,即要么全部执行成功要么全部执行失败。 Redis 事务实现原子性 在 Redis 中,可以使用事务来保证多个 Redis …

    python 2023年5月12日
    00
  • 爬虫系列(九) xpath的基本使用

    一、xpath 简介 究竟什么是 xpath 呢?简单来说,xpath 就是一种在 XML 文档中查找信息的语言 而 XML 文档就是由一系列节点构成的树,例如,下面是一份简单的 XML 文档: <html> <body> <div> <p>Hello world<p> <a href=”/h…

    爬虫 2023年4月11日
    00
  • python输入整条数据分割存入数组的方法

    首先,我们需要了解Python中输入数据的方法,这里我们使用input()函数来输入数据。输入的数据可以是字符串,整数或者浮点数等,并且多个数据可以通过空格或其他符号进行分隔。接下来,我们将详细讲解在Python中如何输入整条数据分割存入数组。 1. 使用split方法分隔数据 使用split方法,可以将输入的数据分割成多个子字符串,并存储到数组中。spli…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部