C:\Users\Loulan>pip list --format=columns
Package Version
-------------- -----------
beautifulsoup4 4.6.0
C:\Users\Loulan>python -V
Python 3.6.2
皆以find_all为例
find_all(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
一共有string、list、regular expression、True、function五种类型的filter
name、attrs的value、text、**kwargs四个参数皆可以使用上述的所有filter
regular expression过滤器:输入正则表达式后,BeautifulSoup会使用search()方法来进行查找
function过滤器:如果return True则说明匹配成功,返回匹配的元素
from bs4 import BeautifulSoup as Soup
查找所有的b标签
soup.find_all('b')
soup.find_all(name='b')
查找所有的a标签以及b标签
soup.find_all(['a','b'])
查找所有tag里面包含字母’a’的tag,包括标签
soup.find_all(re.compile('a'))
查找所有tag里面不包含’a’的tag
soup.find_all(re.compile('[^"a",]'))
查找body里面所有标签
soup.find('body').find_all(True)
查找xx标签,该标签前后皆是string对象
def search_a_x_b(tag):
return tag and isinstance(tag.previous_element,str) and isinstance(tag.next_element,str)
soup.find(search_a_x_b)
查找所有id属性是link的tag
soup.find_all(attrs={'id':'link'})
查找id属性值为link或者new_link的所有标签
soup.find_all(attrs={'id':['link','new_link']})
查找id属性值中含有link的所有标签,包括link1,new_link等
soup.find_all(attrs={'id':re.compiles('link')})
查找含有id属性的所有tag
soup.find_all(attrs={'id':True})
查找href属性值中以.img结尾的所有tag
def search_id(attr):
return attr and attr.lower().endswith('.img')
soup.find_all(attrs={'href':search_id})
BeautifulSoup 4.6 之前的string,现在替换成了text,不过也可以使用string
注意:
- 默认只返回string的值
- 可以通过previous_element属性来获得string值所在的tag
——-
查找value是loulan的所有string
soup.find_all(string='loulan')
查找value是loulan的所有tag
[value.previous_element for value in soup.find_all(string='loulan')]
查找value是’loulan’或者’nihao’的所有string
soup.find_all(string=['loulan','nihao'])
查找value中存在’loulan’的所有string
soup.find_all(string=re.compile('loulan'))
查找在value值的所有的string
soup.find_all(string=True)
查找所有value值是以loulan为结尾的string
def search_string(string):
return string and string.lower().endswith('loulan')
soup.find_all(string=search_string)
注意:因为class是保留字,所以在进行class属性的匹配时,用class_来代替
——-
查找class属性值是loulan的所有tag
soup = Soup.find_all(class_='loulan')
查找class的值是luolan或者nihao的所有tag
soup = Soup.find_all(class_=['loulan','nihao'])
查找class的值包含img的所有的tag
soup = Soup.find_all(class=re.compile('loulan'))
查找含有class属性的所有tag
soup = Soup.find_all(class=True)
查找href值中以img结尾所有的tag
def search_img(href):
return href and href.lower().endswith('.img')
soup.find_all(href=search_img)
string过滤器主要用于完全匹配属性值
list过滤器可以极其方便的查找多个值
regular expression过滤器可以用于不完全匹配等其他特殊匹配
True过滤器可以用来确定存在某些属性
function过滤器最为强大,尽管写起来比上述几个过滤器复杂,但是可以实现任何过滤;比如两侧是string的tag,前面是strong标签后面是a标签,等等复杂过滤