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日

相关文章

  • PyQt5实现将Matplotlib图像嵌入到Scoll Area中显示滚动条效果

    下面我将详细讲解如何使用PyQt5将Matplotlib图像嵌入到Scoll Area中实现滚动条效果。具体步骤如下: 1. 导入相关库 首先需要导入相关库,包括PyQt5、Matplotlib和Numpy等,示例代码如下: import sys import matplotlib.pyplot as plt from PyQt5.QtWidgets imp…

    python 2023年6月3日
    00
  • python如何写try语句

    写try语句是为了在程序出现异常时,不让程序崩溃,而是做出相应的处理。Python中try语句的语法如下: try: # 可能出现异常的代码块 except <异常类型>: # 异常处理的代码块 其中,except后面可以跟具体的异常类型,如except ValueError:,这样只会在捕获到ValueError类型的异常时才会执行该excep…

    python 2023年5月13日
    00
  • Python 3.8 新功能全解

    Python3.8新功能全解 随着Python 3.8的发布,它带来了许多新功能和改进。本篇文章将详细介绍Python 3.8的主要新功能和改进,以及如何使用它们。 格式化字符串字面值(F-strings) Python 3.8引入了格式化字符串字面值(F-strings),它是一种简单且直观的字符串格式化语法。F-strings使用类似于字符串插值的语法,…

    python 2023年5月13日
    00
  • Python实现的文本编辑器功能示例

    下面是Python实现文本编辑器功能示例的完整攻略: 一、制定计划并安装必备工具 在开始实现Python文本编辑器功能示例之前,我们需要明确自己的计划和工具清单。首先,我们要确保自己已经掌握文本编辑器的基本配置和使用方法,并安装以下必备工具: Python 3.x 版本及以上 Tkinter 库:是Python自带的库,用于GUI界面开发 pip 库:是Py…

    python 2023年5月19日
    00
  • Python调用命令行进度条的方法

    当Python程序需要处理大量数据或长时间执行任务时,我们可能需要为用户提供一个进度条来表示任务的进度,让用户能够清楚地知道任务的处理情况。不过Python本身并没有原生支持进度条的功能,不过我们可以通过调用命令行进度条的方式来实现这个功能。 下面是Python调用命令行进度条的方法的完整攻略: 安装命令行进度条工具 首先需要安装一个命令行进度条工具,比较常…

    python 2023年6月3日
    00
  • Pytest运行及其控制台输出信息

    Pytest是一个流行的Python测试框架,它可以轻松地编写简单和复杂的测试,提供了丰富的断言、插件机制以及丰富的控制台输出信息,可以有效地将测试结果以易懂的方式显示给用户。以下是Pytest运行及其控制台输出信息的完整攻略: 安装Pytest 要使用Pytest,需要先安装它。可以使用以下命令来安装: pip install pytest 编写测试脚本 …

    python 2023年6月5日
    00
  • python如何调用百度识图api

    Python调用百度识图API可以用百度提供的Python SDK进行操作,下面将详细讲解如何调用百度识图API。 步骤一:注册申请API Key和Secret Key 具体操作流程如下: 进入百度开发者中心,点击右上角“立即加入”按钮,注册开发者账号。 登录进入百度智能云控制台,创建一个新的应用,获取当前应用的API Key以及Secret Key。 步骤…

    python 2023年5月18日
    00
  • 使用pandas将numpy中的数组数据保存到csv文件的方法

    下面是使用pandas将numpy中的数组数据保存到csv文件的完整攻略。 1. 导入pandas和numpy模块 在使用pandas将numpy中的数组数据保存到csv文件前,需要先导入pandas和numpy模块。具体操作如下: import pandas as pd import numpy as np 2. 创建numpy数组数据 为了进行示例说明,…

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