专栏名称: Python开发者
人生苦短,我用 Python。伯乐在线旗下账号「Python开发者」分享 Python 相关的技术文章、工具资源、精选课程、热点资讯等。
目录
相关文章推荐
51好读  ›  专栏  ›  Python开发者

Python 爬虫之 BeautifulSoup

Python开发者  · 公众号  · Python  · 2017-06-13 19:59

正文

请到「今天看啥」查看全文


#这里得到的就是None,因为这里的html中有很多的子标签


get_text()


可以获得一个标签中的所有文本内容,包括子孙节点的内容,这是最常用的方法


搜索文档树


find_all( name , attrs , recursive , text , **kwargs )


find_all是用于搜索节点中所有符合过滤条件的节点


1. name参数:是Tag的名字,如p,div,title …..


soup.find_all("p") 查找所有的p标签,返回的是[ The Dormouse's story ],可以通过遍历获取每一个节点,如下:


ps = soup . find_all ( "p" )

for p in ps :

print p . get ( 'class' ) #得到p标签下的class属性


传入正则表达式:soup.find_all(re.compile(r’^b’)查找以b开头的所有标签,这里的body和b标签都会被查到


传入类列表:如果传入列表参数,BeautifulSoup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有 标签和 标签


soup.find_all(["a", "b"])


2. KeyWords参数,就是传入属性和对应的属性值,或者一些其他的表达式


  • soup.find_all(id='link2'),这个将会搜索找到所有的id属性为link2的标签。传入正则表达式soup.find_all(href=re.compile("elsie")),这个将会查找所有href属性满足正则表达式的标签

  • 传入多个值:soup.find_all(id='link2',class_='title') ,这个将会查找到同时满足这两个属性的标签,这里的class必须用class_传入参数,因为class是python中的关键词

  • 有些属性不能通过以上方法直接搜索,比如html5中的data-*属性,不过可以通过attrs参数指定一个字典参数来搜索包含特殊属性的标签,如下:


# [

foo!
]

data_soup . find_all ( attrs = { "data-foo" : "value" }) #注意这里的atts不仅能够搜索特殊属性,亦可以搜索普通属性

soup . find_all ( "p" , attrs = { 'class' : 'title' , 'id' : 'value' }) #相当与soup.find_all('p',class_='title',id='value')


3. text参数:通过 text 参数可以搜搜文档中的字符串内容.与 name 参数的可选值一样, text 参数接受 字符串 , 正则表达式 , 列表, True







请到「今天看啥」查看全文