Python爬虫学习Beautiful Soup库

Posted cola_cola

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫学习Beautiful Soup库相关的知识,希望对你有一定的参考价值。

 

快速使用

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,lxml)

一、基本使用

1、标签选择器  soup.标签名---获取这个标签内容,如果有多个该标签,就返回第一个

  • 获取名称 soup.title.name
  • 获取属性 soup.p.attrs[‘name‘]  /  soup.p[‘name‘]
  • 获取内容 soup.p.string
  • 嵌套选择 soup.head.title.string
  • 子节点和子孙结点
    •   contents的用法
from bs4 import BeautifulSoup

soup = BeautifulSoup(html,lxml)
print(soup.p.contents) #将p标签下所有的子标签存入到一个列表中
    •   children的使用 -- 但是一个迭代对象,而不是列表,只能通过循环的方式获得
print(soup.p.children)

for i,child in enumerate(soup.p.children):
        print(i,child)
    •   descendants  子孙节点--也是迭代器

        print(soup.descendants)

    •   父结点和祖先节点

        soup.a.parent  -- 获取父节点信息

        list( enumerate(soup.a.parents) ) -- 获取祖先节点的信息

    •   兄弟节点

        soup.a.next_siblings  获取后面的兄弟节点

        soup.a.previous_sibling 获取前面兄弟节点

        soup.a.next_sibling 获取下一个兄弟标签

        soup.a.previous_sibling 获取上一个兄弟标签

2、标准选择器

find_all( name, attrs, recursive, text, **kwargs )  根据标签名,属性,内容查找文档

html=‘‘‘
<div class="panel">
    <div class="panel-heading">
        <h4>Hello</h4>
    </div>
    <div class="panel-body">
        <ul class="list" id="list-1" name="elements">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
            <li class="element">Jay</li>
        </ul>
        <ul class="list list-small" id="list-2">
            <li class="element">Foo</li>
            <li class="element">Bar</li>
        </ul>
    </div>
</div>
‘‘‘
soup = BeautifulSoup( html,lxml )

#根据name  
#获取ul 循环获取内部的li标签信息
for ul in soup.find_all( ul ):
        print( ul.find_all(li) )

#根据attrs
#注意:查找class相关的 修改attrs = { ‘class_‘ : ‘element‘ }  或者 soup.find_all( "",{ ‘class‘:‘element‘ } )
print( soup.find_all(attrs={ id:list-1 }) )
print( soup.find_all(attrs={ name:elements }) )

#根据text
print(soup.find_all( text=Foo ))

find(name, attrs, recursive, text, **kwargs) -- 返回匹配结果的第一个元素

其他类似用法:

find_parents() 返回所有祖先节点 find_parentd()返回直接父结点

find_next_silings() 返回后面所有的兄弟节点 find_next_sibling() 返回第一个

find_previous_siblings()  find_previous_sibling()

find_all_next() 返回节点后所符合条件的结点   find_next()返回第一个符合条件的节点

find_all_previous() find_previous()

 

3、css选择器

通过select()直接传入css选择器

规则: 

  • .表示class  #表示id
  • 标签1,标签2  -- 找到所有的标签1和标签2
  • 标签1 标签2  -- 找到所有标签1内部的标签2
  • [ attr ] 找到具有某个属性的所有标签
  • [ attr=value ] 找到所有属性值等于value的标签

 

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,lxml)

soup.select(.panel .panel-heading)  #返回class为panel中class为panel-heading的标签

soup.select(ul li)  #返回所有ul中的li标签

soup.select(#list-2 .element) #返回id为list-2 类为element的所有标签

soup.select(ul)[0] #返回第一个ul标签中的标签  

 

4、获取内容 get_text()

5、获取属性 [属性名] 或者 .attrs[属性名]

for ul in soup.select(ul):
        print(ul[id])
        print(ul.attrs[id])

 

以上是关于Python爬虫学习Beautiful Soup库的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫之解析库Beautiful Soup

Python爬虫学习笔记.Beautiful Soup库的使用

Python爬虫学习笔记.Beautiful Soup库的使用

Python3 爬虫Beautiful Soup库的使用

python 爬虫学习--Beautiful Soup插件

Python 爬虫 解析库的使用 --- Beautiful Soup