Python链接获取脚本需求:添加通配符/前缀匹配功能
解决BeautifulSoup筛选特定开头链接的问题
没问题!完全可以实现这个需求,而且有几种简单高效的方法,我给你详细讲一下:
方法一:使用字符串startswith()方法(推荐,简单直接)
这是最适合「开头匹配」场景的方法,直接判断链接的href属性是否以你指定的内容开头,还支持同时匹配多个开头。
完整代码示例:
from bs4 import BeautifulSoup import requests url = "你的目标URL" # 获取网页响应 response = requests.get(url) # 解析HTML页面 soup = BeautifulSoup(response.text, 'html.parser') # 筛选以特定内容开头的链接(示例:筛选以"/article/"开头的链接) target_links = [] for link in soup.find_all('a', href=True): # 只提取带有href属性的<a>标签 href = link['href'] # 替换成你需要的开头内容,也可以用元组匹配多个开头:比如('/article/', '/post/') if href.startswith('/article/'): target_links.append(href) # 输出筛选后的链接 for link in target_links: print(link)
方法二:使用正则表达式(适合复杂匹配场景)
如果需要更灵活的匹配规则(比如开头包含特定模式),可以用正则表达式配合BeautifulSoup的筛选功能。
完整代码示例:
from bs4 import BeautifulSoup import requests import re url = "你的目标URL" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 编译正则表达式:^表示匹配字符串开头,这里匹配以"/article/"开头的链接 pattern = re.compile(r'^/article/') # 直接筛选符合正则的href属性 target_links = [link['href'] for link in soup.find_all('a', href=pattern)] # 输出结果 for link in target_links: print(link)
方法三:使用通配符(shell风格匹配)
如果你习惯用通配符(比如/article/*),可以借助fnmatch模块实现:
from bs4 import BeautifulSoup import requests from fnmatch import fnmatch url = "你的目标URL" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 用通配符匹配开头为"/article/"的链接 target_links = [] for link in soup.find_all('a', href=True): href = link['href'] # 通配符规则:/article/* 表示以"/article/"开头的任意链接 if fnmatch(href, '/article/*'): target_links.append(href) print(target_links)
小提示
- 如果是外部链接(比如以
https://your-domain.com/article/开头),只需要把startswith()或正则里的内容换成完整的前缀即可。 find_all('a', href=True)会过滤掉没有href属性的空链接,避免报错。
内容的提问来源于stack exchange,提问作者Defca Trick
相关产品推荐
相关产品推荐

