BeautifulSoup庫的使用

2021-08-20 20:29:55 字數 4596 閱讀 9619

解析器

使用方法

優勢劣勢

python標準庫

beautifulsoup(markup, "html.parser")python的內建標準庫、執行速度適中 、文件容錯能力強

python 2.7.3 or 3.2.2)前的版本中文容錯能力差

lxml html 解析器

beautifulsoup(markup, "lxml")速度快、文件容錯能力強

需要安裝c語言庫

lxml xml 解析器

beautifulsoup(markup, "xml")速度快、唯一支援xml的解析器

需要安裝c語言庫

html5lib

beautifulsoup(markup, "html5lib")最好的容錯性、以瀏覽器的方式解析文件、生成html5格式的文件

速度慢、不依賴外部擴充套件

from bs4 import beautifulsoup

html = """

..."""

soup = beautifulsoup(html, 'lxml')

print(soup.title) # the dormouse's story

print(soup.head) #

有多個並列標籤時,返回第乙個;有多個巢狀標籤時,返回最外的乙個。

print(soup.prettify()) #返回補全標籤後的html

print(soup.p.name)          # p

print(soup.title.name) # title

print(soup.p.attrs['name']) # liming

print(soup.p['name']) # liming

print(soup.title.string)    # the dormouse's story
print(soup.html.head.title.string)       # the dormouse's story
html = """

once upon a time

elsie

lacie

andtillie

the bottom of a well.

..."""

from bs4 import beautifulsoup

soup = beautifulsoup(html, 'lxml')

print(type(soup.p.contents))

print(soup.p.contents)

輸出:

['\n            once upon a time\n            ', elsie

, '\n', lacie, ' \n and\n ', tillie, '\n the bottom of a well.\n ']

print(soup.p.children)

print(list(enumerate(soup.p.children)))

輸出:

[(0, '\n            once upon a time\n            '), (1, elsie

), (2, '\n'), (3, lacie), (4, ' \n and\n '), (5, tillie), (6, '\n the bottom of a well.\n ')]

print(soup.p.descendants)           

for i, child in enumerate(soup.p.descendants):

print(i, child)

輸出:

0 

once upon a time

1 elsie

2 3 elsie

4 elsie

5 6

7 lacie

8 lacie

9 and

10 tillie

11 tillie

12 the bottom of a well.

print(list(enumerate(soup.a.previous_siblings)))        # [(0, '\n            once upon a time\n            ')]

print(list(enumerate(soup.a.next_siblings))) # [(0, '\n'), (1, lacie), (2, ' \n and\n '), (3, tillie), (4, '\n the bottom of a well.\n ')]

html = 'print(list(enumerate(soup.title.parents)))  

# [(0,),

# (1, ),

# (2, )]

方法

描述方法

描述find()

返回第乙個元素

find_all()

返回所有元素

find_parents()

返回所有祖先節點

find_parent()

返回直接父節點。

find_next_siblings()

返回後面所有兄弟節點

find_next_sibling()

返回後面第乙個兄弟節點

find_previous_siblings()

返回前面所有兄弟節點

find_previous_sibling()

返回前面第乙個兄弟節點。

find_all_next()

返回節點後所有符合條件的節點

find_next()

返回第乙個符合條件的節點

find_all_previous()

返回節點後所有符合條件的節點

find_previous()

返回第乙個符合條件的節點

find_all ( name , attrs , recursive , text , **kwargs ),可根據標籤名、屬性、內容查詢文件。

html='''

'''from bs4 import beautifulsoup

soup = beautifulsoup(html, 'lxml')

print(soup.find_all('ul'))      # [, ]

for ul in soup.find_all('ul'):

print(ul.find_all('li'))

# [foo, map]

# [bar]

print(soup.find_all(attrs=))     #
print(soup.find_all(text='foo'))            # ['foo']
通過select()直接傳入css選擇器即可完成選擇

html='''

hello

goodbye

'''from bs4 import beautifulsoup

soup = beautifulsoup(html, 'lxml')

print(type(soup.select('.1 #2 li')))        # # 有空格隔開, .代表class, #代表id  ,select獲取所有元素

print(soup.select('.1 #2 li')) # [hello, goodbye]

print(soup.select('li')[0]) # hello

print(soup.select('li')[1]) # goodbye

print(soup.select('li')[0].attrs['name'])   # mike

print(soup.select('li')[0]['name']) # mike

print(soup.select('li')[0].get_text())      # hello

BeautifulSoup庫的使用

五.總結 from bs4 import beautifulsoup 例項化bs4物件 soup beautifulsoup res.text,lxml bs4解析出來的結果會是乙個列表 tag soup.select css選擇器表示式 css選擇器 1.根據節點名及節點層次關係定位標籤 標籤選擇...

BeautifulSoup庫的使用

beautifulsoup 解析庫解析器 使用方法 python標準庫 beautifulsoup markup,html.parser lxml html解析器 beautifulsoup markup,lxml lxml xml解析器 beautifulsoup markup,xml html5...

beautifulSoup庫的使用案例

from urllib.request import urlopen from bs4 import beautifulsoup url html urlopen url bs beautifulsoup html,html.parser for child in bs.find table chi...