解析器
使用方法
優勢劣勢
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...