将部分属性传递给Beautiful Soup findall函数

时间:2015-01-22 23:52:04

标签: python web-scraping beautifulsoup

我对python相对较新,但我一直在关注一些youtube教程。我一直在使用beautifulsoup4库进行一些数据抓取。我想基于一个属性的一部分使用findall函数。

属性是onclick = some_garbage-importantline-garbage。有没有办法根据属性的一部分找到对象。

我尝试使用这行代码来解决这个问题:

soup.findAll('a',{'onclick':'[^.]*importantline[^.]*'})

它不起作用。我已经尝试过查找,但我想我真的不知道该怎么说这个问题或者要查找什么。请指出我正确的方向。谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用列表理解:

[a for a in soup.findAll('a') \
    if a.get('onclick') and 'importantline' in a['onclick']]

答案 1 :(得分:1)

首先,您没有编译正则表达式。此外,您可以简化它:

import re

soup.findAll('a', {'onclick': re.compile(r'importantline')})

此外,您可以避免使用正则表达式并使用函数:

soup.findAll('a', onclick=lambda x: x and 'importantline' in x)