BeautifulSoup
BeautifulSoup 是一个非常流行的 python 模块,该模块可以解析网页,并提供定位内容的便捷接口。安装简便
pip install beautifulsoup4
第一步是将已下载的 HTML 内容解析为 soup 文档。由于大多数网页都不具备良好的 html 格式,因此 beautifulsoup 需要对其实际格式进行确定。
from bs4 import BeautifulSoup
broken_html = '<ul class=country><li>Area<li>Population</ul>' #不具备良好格式的破损网页
#将网页标准解析
soup = BeautifulSoup(broken_html,'html.parser')
fixed_html = soup.prettify()
print fixed_html # fixed_html 就是解析后的标准化格式网页
使用 find() 和 find_all() 方法来定位我们需要的元素
soup = BeautifulSoup(broken_html)
ul = soup.find("ul",attrs = {'class':'country'}) #按标签查找
print ul.find("li") # <li>Area</li>
print ul.find_all("li") # [<li>Area</li>,<li>Population</li>]
lxml.html
lxml 是基于 libxml2 这一 XML 解析库的 python 封装。该模块使用 C 语言编写,解析速度比 BeautifulSoup 更快,不过安装过程没 BeautifulSoup 那么简便。
使用的第一步也是将有可能不合法的 HTML 解析为统一格式。
import lxml.html
broken_html = '<ul class=country><li>Area<li>Population</ul>'
#解析为统一格式
tree = lxml.html.fromstring(broken_html)
fixed_html = lxml.html.tostring(tree,pretty_print = True)
print fixed_html # 统一格式的 html
以下代码分别使用 BeautifulSoup 和 lxml.html,功能等价
html = ... #下载的网页
# 使用 BeautifulSoup
soup = BeautifulSoup(html)
tr = soup.find(attrs = {"id":"places_area_row"})
td = tr.find(attrs = {"class":"w2p_fw"})
area = td.text # 具体内容
# 使用 lxml.html
tree = lxml.html.fromstring(html)
td = tree.cssselect("tr#places_area_row > td.w2p_fw")[0] # 使用 CSS 选择器
area = td.text_content() #具体内容
备注:关于 CSS 选择器语法说明如下:http://www.w3school.com.cn/cssref/css_selectors.asp
本文介绍BeautifulSoup和lxml两个流行的Python模块,它们用于解析HTML网页,提供了find和find_all等方法来定位所需元素。同时对比了两者的安装及使用方式。
1034

被折叠的 条评论
为什么被折叠?



