如何使用BeautifulSoup从指定3个域名提取网页链接?
用BeautifulSoup提取指定多域名链接的可行方案
嘿,我来帮你搞定这个问题!你之前尝试用|运算符组合域名的思路没错,但CSS选择器里并不支持这种写法,所以才会失效。下面给你两种简单好用的解决办法:
方案一:用CSS选择器多条件匹配(推荐)
CSS选择器中,逗号代表“或”的逻辑,我们可以把每个域名对应的选择器用逗号分隔开,就能匹配任意一个目标域名的链接了。代码示例如下:
# 定义需要匹配的三个目标域名 target_domains = [ "http://ABCD.tv/", "https://AABCD.tv", "http://FFGV.VV" ] # 自动拼接成CSS选择器字符串 css_selector = ", ".join([f"a[href^='{domain}']" for domain in target_domains]) # 匹配并输出符合条件的链接 for link in soup.select(css_selector): print(link.get('href'))
这个方法和你原来的单域名写法逻辑一致,只是通过逗号把多个选择器组合起来,完全符合你的需求,而且代码简洁高效。
方案二:提取所有链接后手动过滤
如果之后你需要更灵活的过滤规则(比如匹配域名中间部分、忽略大小写等),可以先提取所有带href属性的链接,再用Python的逻辑手动筛选:
target_domains = [ "http://ABCD.tv/", "https://AABCD.tv", "http://FFGV.VV" ] # 遍历所有带href属性的<a>标签 for link in soup.find_all('a', href=True): href = link.get('href') # 判断链接是否以任意目标域名开头 if any(href.startswith(domain) for domain in target_domains): print(href)
小提醒
注意检查目标域名的写法和网页中链接的实际开头是否一致,比如http://ABCD.tv/和http://ABCD.tv(末尾无斜杠)是两种不同的开头,避免漏匹配哦~
内容的提问来源于stack exchange,提问作者Fahd Fuhaid
相关产品推荐
相关产品推荐

