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

请求优化:提取页面链接并校验域名的Python脚本

Python页面链接分类脚本优化指导

原脚本存在的问题

  • 文件操作错误:每次循环用w模式打开文件会清空之前内容,最终仅保留最后一个页面的结果;且未正确关闭文件,易引发资源泄漏。
  • 遍历方式冗余:用range(len(urls))遍历列表,不如直接遍历URL元素简洁。
  • 链接校验逻辑错误:正则表达式含多余空格导致匹配失效;未处理href为空的情况,会触发AttributeError;每个链接都判断并写入文件,导致同一页面被重复写入多次。
  • 域名校验不可靠:正则匹配域名不够严谨,无法处理带http/https前缀、相对链接等场景。

优化后的脚本

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

# 指定需要校验的域名集合(保留域名部分,无需协议前缀)
ALLOWED_DOMAINS = {'x.com', 'www.x.com', 'y.com', 'www.y.com'}
TARGET_URLS = ['https://www.rose.com', 'https://www.pink.com']

# 用with语句自动管理文件,避免资源泄漏
with open('links_good.txt', 'w', encoding='utf-8') as good_file, \
     open('links_need_update.txt', 'w', encoding='utf-8') as update_file:

    for page_url in TARGET_URLS:
        try:
            # 添加超时设置,捕获HTTP请求异常
            response = requests.get(page_url, timeout=10)
            response.raise_for_status()
        except requests.exceptions.RequestException as e:
            print(f"访问页面 {page_url} 失败: {e}")
            update_file.write(f"{page_url}\n")
            continue

        soup = BeautifulSoup(response.text, 'html.parser')
        has_valid_link = False

        for a_tag in soup.find_all('a'):
            href = a_tag.get('href')
            if not href:
                continue  # 跳过无href属性的a标签

            # 解析链接,处理相对链接与绝对链接
            parsed_href = urlparse(href)
            if not parsed_href.netloc:
                # 相对链接,用当前页面的域名补充
                parsed_page = urlparse(page_url)
                domain = parsed_page.netloc
            else:
                domain = parsed_href.netloc

            # 检查域名是否在允许集合中
            if domain in ALLOWED_DOMAINS:
                has_valid_link = True
                break  # 找到有效链接后停止遍历

        # 按页面状态写入对应文件
        if has_valid_link:
            good_file.write(f"{page_url}\n")
        else:
            update_file.write(f"{page_url}\n")

优化关键点说明

  • 文件管理:通过with语句自动处理文件的打开与关闭,避免资源泄漏;提前用w模式打开文件,确保每次运行清空旧数据,写入新结果。
  • 请求健壮性:添加超时设置和异常捕获,处理页面访问失败的情况,防止脚本崩溃。
  • 链接解析:用urlparse专业解析链接,正确提取相对链接、绝对链接的域名,比正则匹配更可靠。
  • 逻辑修正:对每个页面仅做一次状态判断,只要存在一个指定域名的链接就标记为有效,避免同一页面重复写入。
  • 可读性提升:用变量名替代魔法值,便于后续修改域名或目标URL列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:50:54