BeautifulSoup常用的函数

来源:互联网 发布:自考java程序设计试题 编辑:程序博客网 时间:2024/05/22 00:39

以https://movie.douban.com/top250为例子

引用

from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc, 'lxml')

html_doc用requests获取

选择器

1.标签选择器

标签选择器只选择第一个

选择元素

嵌套选择soup.div.p #返回 标签+内容<p class="appintro-title">豆瓣</p>

选择内容

soup.title.string  #返回str豆瓣电影 Top 250也可以 soup.title.get_text()

选择属性

soup.div.attrs   #返回dict{'id': 'db-global-nav', 'class': ['global-nav']}soup.div['id']   #soup.div.attrs['id'] 返回dict中的valuedb-global-nav

其他

选择标签名字 soup.title.name 返回title

2.find_all()

find_all( name , attrs , recursive , text , **kwargs )
  • name:html中的标签,如'li' ,'a','div','p'
soup.find_all('li') #返回list,都 标签+内容                    #就算是li标签中有li标签,都会分开算成2个 
  • attrs:属性,头标签里面的东西,如'id','class','href'
soup.find_all(attrs={'class':'title'})#返回list形式,都 标签+内容#如果不用attrs,class用的是class_ #soup.find_all(class_="title")
  • text:搜索有的字符串内容,非标签了,而是内容
    list,都 标签+内容

  • limit:限制数目输出

soup.find_all(attrs={'class':'title'}, limit=2)[<span class="title">肖申克的救赎</span>, <span class="title"> / The Shawshank Redemption</span>]

参数的其他写法
字符串为基本。另有正则,列表,布朗。甚至方法(lambda…)。
正则:

soup.find_all(text=re.compile('克的'))[<span class="title">肖申克的救赎</span>]

列表:任一匹配则返回

soup.find_all(['em', 'title'])

布朗:

for a in soup.find_all(True,recursive=False):  #recursive表示查不查子孙节点    print(a.name)html

方法:

soup.find_all(lambda a:len(a.attrs)==3)

3.select()

‘.class_name’
‘#id_name’
‘tag_name’
都list, 标签+内容