2011-08-30 125 views
2

基本問題,我失去了一些東西。xpath - 以下兄弟問題

有文字HTML

<tr ><td class="CourseTitle" >foo </td></tr> 
<tr ">  <th >Code</th><th >Type</th> </tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">40000</td><td ">40000</td></tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">40001</td><td ">40000</td></tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">40002</td><td ">40000</td></tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">40003</td><td ">40000</td></tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">40004</td><td ">40000</td></tr> 


<tr class="blue-bar" bgcolor="navy"><td colspan="16"></td></tr> 

<tr "><td class="CourseTitle" >asaa  </td> </tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">4sd0003</td><td ">40000</td></tr> 
<tr valign="top" bgcolor="#FFFFCC"><td ">400sd04</td><td ">40000</td></tr> 

我試圖找出一種方式來獲得以下具有「TD」用@類=「CourseTitle的「TR」以後的所有TR/TD 「

類似:

/html/body/div[5]/table/tbody/tr[3]/td[@class="CourseTitle"]/../following-sibling::tr//td[@class="CourseTitle"] 

只有獲得所有與isn'twhat我要爲匹配TD/@類TRS的列表。

我一直在試圖找出如何讓兄弟姐妹,當兄弟姐妹的孩子中的條件匹配..

我在Python測試這一點,使用的libxml庫。

感謝

回答

0
import lxml.html as lh 
import urllib2 

url='http://websoc.reg.uci.edu/?YearTerm=2011-92&Breadth=ANY&Dept=CHEM&CourseNum=&Division=ANY&CourseCodes=&InstrName=&CourseTitle=&ClassType=ALL&Units=&Days=&StartTime=&EndTime=&MaxCap=&FullCourses=ANY&FontSize=100&CancelledCourses=Exclude&Bldg=&Room=&Submit=Display+Web+Results' 
doc=lh.parse(urllib2.urlopen(url)) 

# For debugging 
# doc=lh.parse('/tmp/Schedule of Classes.html') 


for td in doc.xpath('//tr/td[@class="CourseTitle"]'): 
    title=td.xpath('font/b/text()')[0] 
    print(title) 
    keys=td.xpath('../following-sibling::tr/th/text()') 
    for row in zip(*[iter(td.xpath('../following-sibling::tr/td'))]*len(keys)): 
     vals=[s.text_content() for s in row] 
     print(dict(zip(keys,vals))) 

產生

GENERAL CHEMISTRY 
{'Status': 'OPEN', 'Web': u'\xa0', 'Code': '40060', 'Rstr': 'A', 'Textbooks': 'Bookstore', 'Max': '24', 'WL': 'n/a', 'Enr': '15', 'Sec': 'D10', 'Time': u'F \xa0 12:00-12:50p', 'Units': '0', 'Place': 'RH 108', 'Instructor': 'ARASASINGHAM, R.', 'Type': 'Dis', 'Nor': '0', 'Req': '14'} 
... 
UNIVERSITY TEACHING 
{'Status': 'OPEN', 'Web': u'\xa0', 'Code': '41533', 'Rstr': 'K and S', 'Textbooks': 'Bookstore', 'Max': '150', 'WL': '0', 'Enr': '25', 'Sec': 'A', 'Time': u'M \xa0 12:00-12:50p', 'Units': '1-4', 'Place': 'TBA', 'Instructor': 'TOBIAS, D.BOROVIK, A.', 'Type': 'Tut', 'Nor': '0', 'Req': '26'} 
+0

喜@unutbu試過您的解決方案。沒有生成任何兄弟姐妹。我不知道你爲什麼說我提供的「tr」不是兄弟姐妹。它們與樹木中的水平相同。如果需要,我可以提供一個更好的粘貼示例,但不希望在這裏過分。 –

+0

@bobby 1:你可以發佈更多的上下文嗎? – unutbu

+0

嗨@unutbu - 我粘貼了更多的實際html --- http://fpaste.org/2I8d/ <<,並且在粘貼到實際頁面時提供了一個鏈接 - 謝謝 –

0

我沒有通過任何手段的XPath專家,但你總是可以嘗試:

//tr/td[@class="CourseTitle"]/../following-sibling::tr/td[not(@class="CourseTitle")]/..