想要所有具有2个属性的链接,如何传递2个属性?

时间:2010-08-13 23:52:48

标签: python beautifulsoup

我知道如何传递1个属性,但是如何传递2?

e.g。

somerows = soup.findAll('a', target="blank")

如果我想要所有具有target =“blank”和class =“blah”的链接怎么办?

3 个答案:

答案 0 :(得分:2)

您可以使用字典来避免某些属性名称出现问题,例如“class”:

soup.findAll('a', {
    "target" : "blank",
    "class" : "blah",
    "href" : re.compile(...)
})

documentation中提到了这一点。

答案 1 :(得分:1)

soup.findAll('a', 'blah', target='blank', href=re.compile(...))

Quoth the BS docs

  

attrs的论点很漂亮   晦涩的功能不适合一个人   东西:CSS。这对搜索非常有用   对于具有特定CSS的标记   class,但CSS的名称   attribute,class,也是一个Python   保留字。

     

您可以使用CSS类进行搜索   soup.find(“tagName”,{“class”:   “cssClass”}),但这很多   这种常见操作的代码。   相反,您可以传递一个字符串   attrs而不是字典。该   字符串将用于限制   CSS类。

答案 2 :(得分:0)

如果您想要更复杂的搜索,您还可以执行以下操作:

key = lambda tag: ...
# or even
def key( tag )
    return len( tag.attrs ) == 2 # for example

soup.findAll( key )

请参阅docs