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
相关产品推荐
相关产品推荐

