当前位置:   article > 正文

Beautifulsoup4 详解

beautifulsoup4

1 安装

pip install beautifulsoup4
  • 1

2 使用详解(标签)

2.1 解析库

解析器使用方式
python标准库BeautifulSoup(markup,‘html.parser’ )
lxml HTML解析器BeautifulSoup(markup,‘lxml’)
lxml XML解析器BeautifulSoup(markup,‘xml’)
html5libBeautifulSoup(markup,‘html5lib’

2.2 基本使用

导入模块

from bs4 import BeautifulSoup
  • 1

设置解析器,传递需要解析的html文档

soup = BeautifulSoup(html,'lxml')
  • 1

格式化代码

soup.prettify()
  • 1

查看title标签内的文本

soup.title.string
  • 1

2.3 标签选择器

返回title标签

soup.title

  • 1
  • 2

返回标签的类型

type(soup.title) #返回<class 'bs4.element.Tag'>一个类变量
  • 1

返回head标签

soup.head
  • 1

返回p标签,只返回第一个p标签,如果有多个只能输出第一个

soup.p
  • 1

2.4 获取名称

返回title标签的名称

soup.title.name  #返回title 最外层标签的名称
  • 1

2.5 获取属性

html = '''<p class="title" name="zhaojia">the paragraph</p>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.p.attrs['name'] #返回zhaojia 
soup.p['name']] #返回结果同上
  • 1
  • 2
  • 3
  • 4
  • 5

2.6 获取内容

html = '''<p class="title" name="zhaojia">the paragraph</p>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.p.string #返回the paragraph 
  • 1
  • 2
  • 3
  • 4

2.7 嵌套选择

html = '''<head><p class="title" name="zhaojia">the paragraph</p><head>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.head.p.string  #返回the paragraph
soup.head.p.attrs['name'] # 返回zhaojia
  • 1
  • 2
  • 3
  • 4
  • 5

2.8 子节点和子孙节点

html = '''<head><p class="title" name="zhaojia">the paragraph</p><head>'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.head.contents #返回所有子节点列表
the = soup.head.children
for i,children in enumerate(the)print(i,children) # 返回一个iterable 必须使用for循环遍历出来
soup.head.descendants #获取所有的子孙节点,返回类型是iterable object
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2.9 获取父节点和祖先节点

soup.a.parent #获取父节点,输出父节点全部内容
soup.a.parents #获取祖先节点
  • 1
  • 2

2.10 获取兄弟节点

soup.a.next_siblings
soup.a.previous_siblings
  • 1
  • 2

3 标准选择器

3.1 find_all()方法

3.1.1 根据name查找(name-标签名)

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.find_all('p') 查找所有的p标签,并且以列表的形式返回
type(soup.find_all('p')) 返回类型是<class 'bs4.element.Tag'>
  • 1
  • 2
  • 3
  • 4

3.1.2 根据attrs查找(attrs-属性)

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.find_all(attrs = {'id':'list-1'})
  • 1
  • 2
  • 3

3.1.3 根据text查找 (text-文本)

from bs4 import BeautifulSoup
soup = BeautifulSoup(html,'lxml')
soup.find_all(text = 'the')
  • 1
  • 2
  • 3

3.2 find()方法

find方法返回一个,findall返回所有

4 CSS选择器

通过select()直接传入CSS选择器就可以查找
class 选择器前面加一个点号
id 选择器前面加一个#
标签什么都不需要加
soup.select(’.class’)
soup.select(’#id #id2’)两个条件用空格隔开
soup.select(tag1 tag3)

4.1 获取属性

for ul in soup.select('ul'):
    print(ul['id'])
    print(ul.attrs['id'])
  • 1
  • 2
  • 3

4.2 获取内容


for ul in soup.select('ul'):
    print(ul.get_text)
  • 1
  • 2
  • 3

4,3 通过标签来查找

soup.select('title')
  • 1

4.4 通过类名来查找

soup.select('.classname')
#通过ID来查找
soup.select('#identified')
#通过属性来查找
soup.select("a[class= 'bri' ]")
  • 1
  • 2
  • 3
  • 4
  • 5

4.5 找一个head里面的title,通过子标签查找

soup.select("head>title")
#通过一个兄弟标签进行查找
res = soup.select(".classname ~ .broclassname")
print(res[0].get_text()) #输出一个兄弟标签里面的内容。
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/140339
推荐阅读
相关标签
  

闽ICP备14008679号