如何用Python Requests-HTML检测含HTTP的链接并打印URL?
分析你的实现与优化建议
你的代码方向是对的,但有几个细节问题需要调整,才能精准实现「检测链接是否包含HTTP并打印URL」的需求:
现存问题点
l.links返回的是集合对象:你打印出来的{'http://streamcloud.eu/...'}是Python集合的格式,而不是纯URL字符串——这是因为links属性会返回该元素及其子元素中所有的链接集合,哪怕单个<a>标签只会包含自身的href,格式依然是集合。- 错误的非空判断逻辑:
if link != "set()"这个判断完全不成立,因为link是集合对象,永远不可能等于字符串"set()",正确的判断应该是检查集合是否非空,比如if link。 - 获取链接的方式不够直接:针对单个
<a>标签,直接提取它的href属性是更高效准确的方式,不需要绕路用links。
修正后的代码
import requests from requests_html import HTMLSession link = "http://www.tvil.me/view/93/4/8/v/%D7%90%D7%99%D7%99_%D7%96%D7%95%D7%9E%D7%91%D7%99_IZombie.html" enter_episodes = HTMLSession().get(link) page = enter_episodes.html # 获取所有目标a标签 s = page.xpath("//*[@class='view-watch-button']/a") for l in s: # 安全提取a标签的href属性(避免标签无href时报错) href = l.attrs.get('href') # 检测是否包含HTTP(兼容http/https) if href and 'http' in href.lower(): print(href)
代码说明
l.attrs.get('href'):用get方法避免标签没有href属性时抛出KeyError,更健壮;'http' in href.lower():同时匹配http和https开头的链接,不会遗漏HTTPS类型的链接;- 移除了未使用的
import sys,精简代码结构。
修改后,你会直接得到纯URL字符串的输出,同时精准筛选出包含HTTP协议的链接,完全符合你的需求。
内容的提问来源于stack exchange,提问作者kaki
相关产品推荐
相关产品推荐

