如何使用REGEX(正则表达式)提取包含特定模式的网页链接?
可以通过正则表达式实现该需求,两种常用实现方案如下:
方案1:直接利用BeautifulSoup的内置正则过滤能力
这种方案无需额外写判断逻辑,在查找a标签时就完成过滤,代码更简洁:
import re from bs4 import BeautifulSoup # 定义匹配规则,^表示匹配字符串开头,?属于正则特殊字符需要加\转义 target_href_pattern = re.compile(r'^/market_information/announcements/company_announcement/announcement_details\?ann_id=') title = soup.find_all('tbody') for i in title: # 查找href符合规则的a标签 for link in i.find_all('a', href=target_href_pattern): print(link['href'])
方案2:遍历链接后单独做正则判断
如果需要对链接做更多自定义处理,可以在拿到href属性后单独判断:
import re target_prefix = r'^/market_information/announcements/company_announcement/announcement_details\?ann_id=' title = soup.find_all('tbody') for i in title: for link in i.find_all('a'): href = link['href'] # 匹配字符串开头符合规则的链接 if re.match(target_prefix, href): print(href)
两种方案都只会输出你需要的公告类链接,自动过滤无关的企业信息页、RSS订阅地址等内容。如果你爬取到的href可能是带域名的完整URL,把正则开头的^去掉即可实现包含匹配。
内容的提问来源于stack exchange,提问作者Yazid Yaakub
相关产品推荐
相关产品推荐

