爬虫(2)-- 网页解析 BeautifulSoup & lxml.html

本文介绍BeautifulSoup和lxml两个流行的Python模块,它们用于解析HTML网页,提供了find和find_all等方法来定位所需元素。同时对比了两者的安装及使用方式。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值