Python 靓汤
我对靓汤有意见。特别是使用.find方法。有没有一种方法可以让它广泛匹配而不是精确匹配?现在,只有找到“第一个”和“最后一个”时,它才有效Python 靓汤,python,regex,python-3.x,beautifulsoup,Python,Regex,Python 3.x,Beautifulsoup,我对靓汤有意见。特别是使用.find方法。有没有一种方法可以让它广泛匹配而不是精确匹配?现在,只有找到“第一个”和“最后一个”时,它才有效 soup.find("a", string="First Last").get('href') 我想让它找到这两个单词的任意一个组合,有没有大写字母。所以它会发现 First first Last first last last something something last etc.. 谢谢你的帮助 的文档深入解释了许多选项。(请确保至少继续阅读本节
soup.find("a", string="First Last").get('href')
我想让它找到这两个单词的任意一个组合,有没有大写字母。所以它会发现
First
first
Last first
last last
something something last
etc..
谢谢你的帮助 的文档深入解释了许多选项。(请确保至少继续阅读本节后面的find_all()
、name
和关键字参数部分;这是您将找到最佳示例的地方。)
您使用的仅与以下内容完全匹配:
最简单的过滤器是字符串。将字符串传递给搜索方法,Beautiful Soup将对该字符串执行匹配
但您可以使用,例如: 如果传入正则表达式对象,Beauty Soup将使用其search()方法对该正则表达式进行过滤
…或: 如果其他匹配项都不适用于您,请定义一个将元素作为其唯一参数的函数。如果参数匹配,函数应返回True,否则返回False 您还可以编写一个接受整个标记的函数,而不仅仅是它的
字符串
,如果这是一个问题,它可以更灵活地处理由意外标记引起的错误
您没有非常清楚地指定您想要的确切规则是什么,也没有给我们提供一个完整的示例进行测试,因此我不能保证正则表达式或函数实际上能够完全满足您的要求。下面是一个例子:
>>> h = '<a>first</a> <a>last first</a> <a>something something last</a> <a>larst fist</a> <p>First Last</p>'
>>> soup = BeautifulSoup(h, 'lxml')
>>> soup.find_all("a", string=re.compile(r'(?i)(first|last)'))
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>> soup.find_all("a", string=matches_firstlast)
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>h='first last first某物last last firstfirst last'
>>>汤=美汤(h,'lxml')
>>>soup.find_all(“a”,string=re.compile(r'(?i)(first'last'))
[第一,最后第一,最后一件事]
>>>soup.find_all(“a”,string=matches_firstlast)
[第一,最后第一,最后一件事]
希望这和文档足以编写您需要的任何代码。您能提供您正在处理的页面的一小部分,以便对其执行一些测试吗?
def matches_firstlast(s):
lower = s.casefold()
return 'first' in lower or 'last' in lower
soup.find("a", string=matches_firstlast)
>>> h = '<a>first</a> <a>last first</a> <a>something something last</a> <a>larst fist</a> <p>First Last</p>'
>>> soup = BeautifulSoup(h, 'lxml')
>>> soup.find_all("a", string=re.compile(r'(?i)(first|last)'))
[<a>first</a>, <a>last first</a>, <a>something something last</a>]
>>> soup.find_all("a", string=matches_firstlast)
[<a>first</a>, <a>last first</a>, <a>something something last</a>]