网页抓取解密( 3.LxmlLxml网页源码(css选择器)性能对比与结论 )
优采云 发布时间: 2021-11-28 06:08网页抓取解密(
3.LxmlLxml网页源码(css选择器)性能对比与结论
)
from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html, "html.parser") #用html解释器对得到的html文本进行解析
>>> tr = soup.find(attrs={"id":"places_area__row"})
>>> tr
Area: 244,820 square kilometres
>>> td = tr.find(attrs={"class":"w2p_fw"})
>>> td
244,820 square kilometres
>>> area = td.text
>>> print(area)
244,820 square kilometres
3. Lxml
Lxml 是一个基于 libxml2 的 Python 包,一个 XML 解析库。模块采用C语言编写,解析速度比BeautifulSoup快。书中对比分析得出的结论,抓取一个网页后抓取数据的一般步骤是:首先解析网页源代码(这3种方法中使用lxml),然后选择抓取数据(css选择器)
#先解析网页源码(lxml)示例
import lxml.html
broken_html = "AreaPopulation"
tree = lxml.html.fromstring(broken_html) #解析已经完成
fixed_html = lxml.html.tostring(tree, pretty_print=True)
print(fixed_html)
#output
#b'\nArea\nPopulation\n\n'
#解析网页源码(lxml)后使用css选择器提取目标信息
import lxml.html
import cssselect
html = download("http://example.webscraping.com/view/Aland-Islands-2") #下载网页
html = str(html)
tree = lxml.html.fromstring(html) #解析已经完成
td = tree.cssselect("tr#places_area__row > td.w2p_fw")[0] #选择id="plac..."名为tr的标签下的,class="w2p..."名为td的标签中[0]元素
area = td.text_content() #目标信息area值为td标签中的text信息
print(area)
以上三种方法的性能对比及结论: