我正在尝试创建一个与页面源链接匹配的正则表达式。我的文字格式如下:
这里的东西 这是一个链接<a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a><span class="mls _1ccm9 _49"></span><a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a><span class="m1ls _1cm9 _49"></span>
我想获得所有以href =“https://www.here.com/(.*)?ref=br_rs”&gt;
开头的链接所以从链接来看,我会得到整个链接,或者FIrstCal和Mall(来自链接)
Python代码:
regex = r'(?<=href="https://www.here.com/).*(?<=?ref=br_rs)'
link = re.findall(regex, str(source))
link
但它不起作用。
有什么想法吗?
PS:正则表达式是唯一的方法。 HTML解析不起作用,因为网站的结构并不“稳定”。
答案 0 :(得分:3)
将BeautifulSoup与仅与href
内容匹配的正则表达式使用:
soup.find_all('a', href=re.compile('https://www.here.com/.*?ref=br_rs'))
解析器不关心结构是否正在发生变化,您只需要准确了解 的稳定性;链接。
演示:
>>> import re
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('''\
... <a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a><span class="mls _1ccm9 _49"></span><a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a><span class="m1ls _1cm9 _49"></span>
... ''')
>>> soup.find_all('a', href=re.compile('https://www.here.com/.*?ref=br_rs'))
[<a class="_5syj" href="https://www.here.com/FirstCal?ref=br_rs">First Cal</a>, <a class="_fasc" href="https://www.here.com/Mall?ref=br_rs">Mall</a>]