Python抓取网页图片难点分析

Python抓取网页图片难点分析

1. 资源定位

要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式:

1.1 直接获取源代码中的图片链接

在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。

示例代码:

import requests
from bs4 import BeautifulSoup

url = "https://www.example.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
img_tags = soup.find_all("img")

for img in img_tags:
    print(img.get("src"))

1.2 解析JS代码获取资源链接

JS代码与HTML代码相互嵌套、互为调用,在JS代码中也可以获取到图片资源链接。使用正则表达式或专业的JS解析库,可以在JS代码中获取到需要的资源路径。

示例代码:

import re
import requests

url = "https://www.example.com/"
response = requests.get(url).text
img_list = re.findall(r"background-image:url\((.*?)\)", response)

for img in img_list:
    print(img)

2. 资源下载

完成资源定位以后,还需要对这些资源进行下载,并保存到本地。

2.1 直接使用requests库下载资源

通过requests库下载资源时,要注意使用二进制格式进行下载,并且在保存文件时使用正确的文件名。

示例代码:

import os
import requests

url = "https://www.example.com/img/example.jpg"
response = requests.get(url)

if response.status_code == 200:
    with open("example.jpg", "wb") as f:
        f.write(response.content)

2.2 使用urllib库下载资源

同样可以使用urllib库进行资源下载。

示例代码:

import os
import urllib.request

url = "https://www.example.com/img/example.jpg"
response = urllib.request.urlopen(url)

if response.status == 200:
    with open("example.jpg", "wb") as f:
        f.write(response.read())

3. 错误处理

在网络请求中,不可避免地会发生各式各样的错误,如服务器拒绝访问、网络超时等。要保证代码稳定可靠,需要对错误进行及时处理。

3.1 增加网络重试机制

有些错误是短暂的、偶发的,例如网络断开、服务器繁忙等,对于这些错误,可以使用网络重试机制进行处理。可以使用retrying库进行实现。

示例代码:

import os
import requests
from retrying import retry

@retry(stop_max_attempt_number=3)
def download_img(url, file_name):
    response = requests.get(url)
    if response.status_code != 200:
        raise Exception("response status code is not 200")

    with open(file_name, "wb") as f:
        f.write(response.content)

url = "https://www.example.com/img/example.jpg"
file_name = "example.jpg"

try:
    download_img(url, file_name)
except Exception as e:
    print("error: ", e)

3.2 使用异常捕获处理

对于一些无法通过网络重试机制解决的错误,可以使用异常捕获进行处理,例如当服务器返回的状态码为404时,就说明请求的资源不存在。

示例代码:

import os
import requests

url = "https://www.example.com/img/example.jpg"
file_name = "example.jpg"

response = requests.get(url)

if response.status_code == 200:
    with open(file_name, "wb") as f:
        f.write(response.content)
else:
    raise Exception("status code is not 200, response status: %d" % response.status_code)

4. 总结

本文介绍了抓取网页图片的完整攻略,包括资源定位、资源下载和错误处理。通过本文的介绍,读者可以掌握Python抓取网页图片的基本方法及常见模块的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python抓取网页图片难点分析 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 从零开始搭建基于Python的微信小程序的教程分享

    搭建基于Python的微信小程序教程分享 背景 微信小程序已经成为移动应用的新趋势,而Python作为当前最流行的编程语言之一,一定程度上可以帮助开发人员更好地实现微信小程序的开发需求。本文旨在为想要通过Python打造自己的小程序的开发者提供一个指南。 准备工作 在开始搭建Python微信小程序前,需要准备以下的工具和环境: 微信小程序开发者工具 Pyth…

    python 2023年5月23日
    00
  • Python 获得命令行参数的方法(推荐)

    Python 获得命令行参数的方法(推荐) Python 是一种高效、易学且分布式的语言,它可以用来编写各种应用程序,包括命令行工具。因此,获取命令行参数是 Python 中非常基础的操作之一。 基本使用方法 在 Python 中,获取命令行参数可以使用 sys.argv 方法。sys.argv 中的第一个参数表示脚本本身的名称,后面的参数依次表示命令行输入…

    python 2023年6月2日
    00
  • python微信公众号之关注公众号自动回复

    下面我将为您详细讲解“python微信公众号之关注公众号自动回复”的完整攻略,包括所需要的材料、具体步骤和示例说明。 材料 在开始之前,我们需要准备以下材料: 微信公众号的appid和appsecret Python3.x的开发环境 第三方模块itchat 能够实现外网访问的服务器 步骤 注册微信公众号 首先,我们需要注册一个微信公众号。注册完成后,我们需要…

    python 2023年6月3日
    00
  • python使用response.read()接收json数据的实例

    当Python发送http请求后,服务器返回的响应数据可能是JSON格式的,此时可以使用response.read()方法接收JSON数据。下面是详细的Python代码示例: 1. Python使用response.read()接收JSON数据示例1 import urllib.request import json url = ‘https://api.g…

    python 2023年6月3日
    00
  • 如何使用 Python Redis 库的事务功能?

    如何使用 Python Redis库的事务功能? Redis 是一种高性能的键值存储数据库,支持多种数据结构和高级功能。其中,事务是 Redis 的一个重要功能可以保证个 Redis 命的原子性执行。在 Python 中,我们可以使用 Redis-py 库来连接 Redis 数据库,并使用 Redis-py 库的事功能来多个 Redis 命令。在本文中,我们…

    python 2023年5月12日
    00
  • python 邮件检测工具mmpi的使用

    下面是详细的Python邮件检测工具MMPI使用攻略。 Python 邮件检测工具MMPI使用攻略 什么是MMPI MMPI全称为Mail Malicious Python Inspector,是一个Python编写的邮件恶意代码检测工具,可以在电子邮件中检测恶意的URL链接、附件和邮件内容。 安装MMPI 安装Python MMPI是基于Python开发的…

    python 2023年6月3日
    00
  • Python中利用Scipy包的SIFT方法进行图片识别的实例教程

    Python中利用Scipy包的SIFT方法进行图片识别是一项比较具有参考意义的技术。下面,我将会详细介绍如何进行这项操作,包括步骤、代码示例以及注意事项等。 步骤 Python中利用Scipy包的SIFT方法进行图片识别的主要步骤如下: 导入必要的包和模块,包括cv2、scipy等; 读取原始图像; 对图像进行预处理,包括去噪、灰度化、裁剪等操作; 使用S…

    python 2023年5月18日
    00
  • python制作一个简单的gui 数据库查询界面

    下面是关于如何使用Python制作一个简单的GUI数据库查询界面的攻略: 简介 GUI(Graphical User Interface)是图形用户界面的缩写,通过图形界面来实现用户和程序之间的交互,比传统的命令行界面更方便、易用。在此基础上,结合数据库查询,可以实现更为复杂的数据操作。Python语言作为一种易学易用的编程语言,支持多种图形界面框架,如Tk…

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