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

Python3提取网页链接问题:代码无输出求排查

问题分析与修复方案

我帮你排查了代码里的几个关键问题,导致解析环节毫无反应的原因主要有这些:

  • 变量执行顺序完全颠倒:你在还没定义link变量、甚至没获取页面内容的时候,就调用了newParser.feed(link)——这要么会直接报错,要么就是给解析器传入了空内容,自然不会有输出。正确流程应该是先获取网页内容,再把内容传给解析器处理。
  • 链接判断条件错误:link.find('http') >=1会漏掉所有以http开头的链接(因为http在字符串里的索引是0),应该改成link.find('http') >= 0,或者用更直观的link.startswith('http')来判断绝对链接。
  • 页面内容获取代码不完整:你的req = url...没写完,需要完整实现网页内容的请求与读取逻辑。

下面是修正后的完整代码:

from html.parser import HTMLParser
import urllib.request

class myParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag == "a":
            # 把attrs拆成键值对,可读性更好
            for attr_name, attr_value in attrs:
                if attr_name == "href":
                    # 用startswith判断绝对链接更准确
                    if attr_value.startswith('http'):
                        print(attr_value)

# 1. 先定义目标URL
url = "http://www.asriran.com"
# 2. 完整获取网页内容
try:
    response = urllib.request.urlopen(url)
    # 处理编码避免乱码(可根据目标网站实际编码调整)
    page_content = response.read().decode('utf-8')
    # 3. 初始化解析器并传入页面内容
    newParser = myParser()
    newParser.feed(page_content)
except Exception as e:
    print(f"页面请求或解析出错: {e}")

额外优化说明:

  • 增加了异常处理,避免网络问题、编码问题直接导致程序崩溃;
  • 将attrs的遍历改为键值对形式,代码可读性更强;
  • 用startswith('http')替代find,判断绝对链接的逻辑更高效直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:27:51