首次用Python做网页爬虫失败,Python for Everyone中urllib示例无预期输出
问题原因与解决方法
核心问题出在正则表达式的写法错误:
- 正则开头添加的
^是行/字符串起始匹配锚点,而HTML内容中href属性前必然存在<a标签、空格等内容,不可能处于行首位置,导致re.findall无法匹配到任何结果,因此没有输出。
修正后代码
仅需删除正则开头的^锚点即可正常运行:
# 从输入的URL中提取链接 import urllib.request, urllib.parse, urllib.error import re import ssl # 忽略SSL证书错误 ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE url = input("Enter- ") html = urllib.request.urlopen(url, context = ctx).read() # 移除开头的^锚点即可匹配所有符合规则的href属性 links = re.findall(b'href="(http[s]?://.*?)"', html) for link in links: print(link.decode())
可选优化建议
- 如需兼容部分不规范的HTML写法(比如
href前存在多个空格),可将正则调整为b'\s*href="(http[s]?://.*?)"',提升匹配兼容性。 - 实际开发场景中不推荐使用正则解析HTML,可选择
BeautifulSoup等专用HTML解析库,容错能力和解析准确率更高。
内容的提问来源于stack exchange,提问作者sourabh patel
相关产品推荐
相关产品推荐

