2016-05-02 11 views
0

からデータを追跡:XPathは、私はいくつかの時間のためのウェブサイトに掘ってきたすべてのテーブル

http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution

私は、各大学から修士の下でデータを抽出する必要があります。

すべての大学がマスターのデータを持っているわけではないので、私はそれを把握する必要があります。

どうすればこの状況のデータを追跡できますか?

これまでXPATHコードと私のパイソン:

import __future__ 
from lxml import html 
import requests 
from bs4 import BeautifulSoup 

page = requests.get('http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution') 

soup = str(BeautifulSoup(page.content, 'html.parser')) 

tree = html.fromstring(soup) 

for table in tree.xpath('//table[@width="95%" and @align="center" and @class="center"]'): 
    print('-- NEW TABLE -- \n') 
    tab = table.xpath('.//table[@width="260px"]/tr/td[@style="width: 100%;"]/text()') 
    print(tab) 

print('Ready !!') 

あなたはそれが-- NEW TABLE --を出力しますが、tab変数が空の配列で見たよう。

tab変数は、バカロレア、各テーブルの看護実践の修士博士の下でのデータで構成されている必要があります。

答えて

1

試してみてください。

for table in tree.xpath('(//tr[ td[span="Baccalaureate"] or td[contains(span,"Master")] ]/ancestor::tr[1])'): 
    print('-- NEW TABLE -- \n') 
    tab = table.xpath('.//table[@width="260px"]/tr/td[@style="width: 100%;"]/text()') 
    print(tab) 
+0

それは魔法のように動作します。 これを理解するのを手伝ってください。 なぜあなたは 'ancestor :: tr [1]'を入れましたか? なぜ 'td'を' tr [td ...] 'のように' td'を置くのですか? –

+0

'tr [td ...]'はあなたが探しているデータでtrを見つけます。 'ancestor :: tr [1]'は、これより上の次のtrを見つけます。このtrは、1つの大学のすべてのデータを保持します。 –

+0

しかし、なぜそれは 'tr/td [...]'のようには機能しませんか? 'td'はなぜ' tr'のインデックスでなければならないのですか? 'tab'の変数xpathを見ると違っています...なぜですか? 'TR [TD ...]'(TR発現を有すると述語)が 'tr'しかしを見つけ –

0

次のxpathを使用して、マスタのデータを抽出することができます。

//span[contains(text(),'Master')]/parent::td[1] 
関連する問題