2014-12-03 41 views
0

我一直沒能找到一個簡單的方法來做到這一點,我一直在關注this ,我寫了下面,簡單的Web使用Python

##just comments before this 
    import lxml,requests 
23 page = requests.get('https://finalexams.rutgers.edu.html') 
24 
25 tree = html.fromstring(page.text) 
26 
27 tableRow = tree.xpath('//tr/text() ') 
28 
29 print 'Rows' , tableRow 

該腳本需要通過解析表像這樣的行並將其中的內容取出,但可能會有無數的錶行。我不知道如何訪問嵌套標籤,並且他們沒有唯一的名稱或ID以供我查找。

我該如何編寫一個for循環來獲取這些表格行中的每一行,並讓我抓取它們的各個位?

<tr> 
    <td> 04264</td> 
    <td>01:198:205</td> 
    <td>01</td> 
    <td>INTR DISCRET STRCT I</td> 



    <td>C</td> 
    <td>Dec 17, 2014: 8:00 AM - 11:00 AM </td> 




    </tr> 

    <tr> 
    <td> 09907</td> 
    <td>01:198:214</td> 
    <td>01</td> 
    <td>SYSTEMS PROGRAMMING</td> 



    <td>C</td> 
    <td>Dec 18, 2014: 8:00 PM - 11:00 PM </td> 




    </tr> 
+0

'tree = html.fromstring(page.text)'不會使用'import lxml';你在某處做過「從lxml導入html」嗎? – abarnert 2014-12-03 02:31:28

回答

0

遍歷所有tr標籤,並在td標籤的每一行的內部循環,例如:

from lxml.html import fromstring 

data = """ 
your html here 
""" 

root = fromstring(data) 
for index, row in enumerate(root.xpath('//table/tr')): 
    print "Row #%s" % index 

    for cell in row.findall('td'): 
     print cell.text.strip() 

    print "----" 

打印:

Row #0 
04264 
01:198:205 
01 
INTR DISCRET STRCT I 
C 
Dec 17, 2014: 8:00 AM - 11:00 AM 
---- 
Row #1 
09907 
01:198:214 
01 
SYSTEMS PROGRAMMING 
C 
Dec 18, 2014: 8:00 PM - 11:00 PM 
---- 
3

如果你想找到tr元素他們自己,而不是他們的(空)文本,只是搜索tr元素,而不是他們的文本:

rows = tree.xpath('//tr') 

然後你就可以遍歷他們:

for row in rows: 

然後你就可以搜索每一個td元素(例如,通過使用row.xpath,或row.findall等),或者只承擔全部他們的孩子td元素(因爲他們碰巧在這種情況下):

for column in row: 

然後你就可以做不管它是你想與每一列做的,像提取其文本:

 print column.text