from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html, "html.parser") #用html解釋器對得到的html文本進行解析
>>> tr = soup.find(attrs={"id":"places_area__row"})
>>> tr
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 是基于這一XML解析庫的封裝,該模塊使用C語言編寫c 抓取網頁數據,解析速度比更快。經過書中比較分析得出的結論c 抓取網頁數據,爬取網頁后抓取數據的一般的步驟為:先解析網頁源碼(用這3種方法中的lxml),再選擇抓取數據(css選擇器)
#先解析網頁源碼(lxml)示例
import lxml.html
broken_html = "- Area
- Population
"
tree = lxml.html.fromstring(broken_html) #解析已經完成
fixed_html = lxml.html.tostring(tree, pretty_print=True)
print(fixed_html)
#output
#b'\n- Area
\n- Population
\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)
以上三種方法性能對比與結論: