You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python爬虫代码以获取所有含image.png的网页列表?

修改代码实现包含image.png的网页列表生成

第一步:修正原代码的基础语法错误

原代码存在多处语法/拼写问题,先修正这些基础错误:

  • 函数getdata内代码缺少缩进,Python要求函数体必须缩进
  • request.get拼写错误,应为requests.get
  • BeautifulSoup初始化需指定解析器(如html.parser),否则会抛出警告
  • print(imgae_links)拼写错误,变量名应为image_links

修正后的基础代码片段:

import requests
from bs4 import BeautifulSoup

def getdata(url):
    r = requests.get(url)
    return r.text

data = getdata("https://example.com")
soup = BeautifulSoup(data, 'html.parser')

# 匹配所有src以image.png结尾的图片(覆盖相对/绝对路径)
image_links = soup.find_all('img', {'src': lambda x: x and x.endswith('image.png')})
print(image_links)

第二步:添加网页遍历逻辑,实现"所有包含image.png的网页"收集

原代码仅检查单个页面,要生成目标列表,需要构建简单爬虫遍历站点内的网页:

  • 用集合维护已访问URL,避免重复爬取
  • 提取页面中所有<a>标签的链接,将相对路径转为绝对URL
  • 对每个页面检查是否包含image.png
  • 收集符合条件的URL并输出

完整修改后的代码:

import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse

def getdata(url):
    try:
        r = requests.get(url, timeout=5)
        r.raise_for_status()  # 抛出HTTP请求错误
        return r.text
    except requests.exceptions.RequestException:
        return ""

def find_pages_with_image(base_url, target_image="image.png"):
    visited = set()
    queue = [base_url]
    matching_pages = []

    while queue:
        current_url = queue.pop(0)
        if current_url in visited:
            continue
        visited.add(current_url)

        page_content = getdata(current_url)
        if not page_content:
            continue

        soup = BeautifulSoup(page_content, 'html.parser')
        # 检查当前页面是否包含目标图片
        has_target_image = soup.find('img', {'src': lambda x: x and x.endswith(target_image)})
        if has_target_image:
            matching_pages.append(current_url)
            print(f"找到包含图片的页面: {current_url}")

        # 提取页面中所有链接,转为绝对URL
        for link in soup.find_all('a', href=True):
            href = link['href']
            absolute_url = urljoin(base_url, href)
            # 仅爬取同一域名下的页面
            if urlparse(absolute_url).netloc == urlparse(base_url).netloc:
                if absolute_url not in visited and absolute_url not in queue:
                    queue.append(absolute_url)

    return matching_pages

# 替换为你要爬取的站点根URL
base_url = "https://example.com"
result = find_pages_with_image(base_url)
print("\n所有包含image.png的页面列表:")
for page in result:
    print(page)

关键修改说明

  • 增加异常处理,避免单个请求失败导致程序崩溃
  • 使用urljoin处理相对路径,确保链接为绝对URL
  • 限制爬取同一域名下的页面,避免无差别爬取
  • 用队列实现广度优先遍历,用集合去重已访问页面
  • 改用lambda表达式匹配img的src,覆盖image.png、/image.png、../image.png等多种路径情况

内容的提问来源于stack exchange,提问作者Chras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 07:30:22