所以我正在使用机械汤包的测试来进入一些webscraping的东西,我遇到了一个有趣的问题。我想获得一个页面中所有链接的列表,这些链接在显示的文本中有一个句点,表示一个文件。我可以在for循环中使用if语句检查它:
for link in browser.links():
if '.' in str(link.string):
但是links方法有一种方法可以使用link_text ="无论"来搜索链接的字符串,但它需要完全匹配。
我有什么方法可以做:
for link in browser.links(link_text=something_with_a_period_in_it):
我有一种感觉,这不会节省任何计算时间,但我可以看到它在将来有用。
答案 0 :(得分:0)
如果您覆盖相等比较,则可以执行此操作。
links()
方法的code表明这就是使用link_text
完成的所有工作:
if link_text is not None:
all_links = [a for a in all_links
if a.text == link_text]
所以这只是一个简单的平等比较。你想要的是一个对象,当且仅当该字符串包含.
时才与字符串进行比较。这是一个简单的例子:
class ContainsDot(object):
def __eq__(self, other):
return '.' in other
您需要实例化它,然后您可以将它与任何字符串进行比较并获得您期望的结果:
>>> c = ContainsDot()
>>> 'sdfsdfasdf' == c
False
>>> 'sdfasdf.asdfasd' == c
True
>>> c == 'sdfasdfa.asdfasd'
True
>>> c == ''
False
>>> c == '.'
True
我没有MechanicalSoup但无法测试,但它应该如下:
for link in browser.links(link_text=ContainsDot()):