xpath - следующий вопрос - PullRequest
       1

xpath - следующий вопрос

2 голосов
/ 31 августа 2011

основной вопрос, что я что-то упускаю.

имеет текст 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>

Я пытаюсь найти способ получить все последующие tr / td, следующие за«tr», который имеет «td» с @ class = «CourseTitle»

что-то вроде:

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

только получает список всех trs с соответствующим классом td / @это не то, ради чего я собираюсь.

Я пытался выяснить, как вы получаете братьев и сестер, когда ребенок брата соответствует условию ..

Ятестируем это на python, используя libxml libs.

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 августа 2011

Я не эксперт XPath, но вы всегда можете попробовать:

//tr/td[@class="CourseTitle"]/../following-sibling::tr/td[not(@class="CourseTitle")]/..
0 голосов
/ 31 августа 2011
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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...