爬取網頁後的抓取資料_3種抓取網頁資料方法

Pop_Rain發表於2017-05-19

1. 正規表示式

(1)

re.findall('<tr id="places_area__row">.*?<td\s*class=["\']w2p_fw["\']>(.*?)</td>', html)

(2)

import re
pattern = re.compile("hello")
#match_list = re.findall(pattern, "hello world! hello") 這個是找全部匹配的,返回列表
match = pattern.match("hello world! hello") #這個是找匹配的,有就返回一個,沒有返回None
print(match)

2. BeautifulSoup(bs4)
轉Python中使用Beautiful Soup庫的超詳細教程:http://www.jb51.net/article/65287.htm
from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(html, "html.parser")    #用html直譯器對得到的html文字進行解析
>>> tr = soup.find(attrs={"id":"places_area__row"})
>>> tr
<tr id="places_area__row"><td class="w2p_fl"><label for="places_area" id="places_area__label">Area: </label></td><td class="w2p_fw">244,820 square kilometres</td><td class="w2p_fc"></td></tr>
>>> td = tr.find(attrs={"class":"w2p_fw"})
>>> td
<td class="w2p_fw">244,820 square kilometres</td>
>>> area = td.text
>>> print(area)
244,820 square kilometres

3. Lxml

Lxml 是基於libxml2這一XML解析庫的Python封裝,該模組使用C語言編寫,解析速度比BeautifulSoup更快。經過書中比較分析得出的結論,爬取網頁後抓取資料的一般的步驟為:先解析網頁原始碼(用這3種方法中的lxml),再選擇抓取資料(css選擇器)
#先解析網頁原始碼(lxml)示例
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)

#output
#b'<ul class="country">\n<li>Area</li>\n<li>Population</li>\n</ul>\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)


以上三種方法效能對比與結論:



相關文章