2010-09-27 62 views
-1

我正在嘗試盜版報告的示例代碼。 代碼行:解析工作原理

for incident in soup('td', width="90%"): 

seraches一個元素td與屬性width="90%",正確的湯?它調用BeautifulStoneSoup類的__init__方法,最終調用SGMLParser.__init__(self)

我正確使用上面的類流嗎?

湯看起來像這樣的報告,現在:

<td class="fabrik_row___jos_fabrik_icc-ccs-piracymap2010___narrations" ><p>22.09.2010: 0236 UTC: Posn: 03:49.9N – 006:54.6E: Off Bonny River: Nigeria.<p/> 
<p>About 21 armed pirates in three crafts boarded a pipe layer crane vessel undertow. All crew locked themselves in accommodations. Pirates were able to take one crewmember as hostage. Master called Nigerian naval vessel in vicinity. Later pirates released the crew and left the vessel. All crew safe.<p/></td> 

沒有在文中沒有width標記。我改變了代碼,正在搜索的行:

for incident in soup('td', class="fabrik_row___jos_fabrik_icc-ccs-piracymap2010___narrations"): 

看來,class是一個保留字,也許?

如何獲取當前的示例代碼以運行,並且在應用程序中進行了更多更改,而不僅僅是HTML輸出?

我使用的URL:

urllib2.urlopen("http://www.icc-ccs.org/index.php?option=com_fabrik&view=table&tableid=534&calculations=0&Itemid=82") 
+0

HTML標籤是從我的湯 NewB 2010-09-27 18:23:32

回答

0

class是保留字,並不會與該方法的工作。

這種方法有效,但不返回列表:

soup.find("tr", { "class" : "fabrik_row___jos_fabrik_icc-ccs-piracymap2010___narrations" }) 

我確認瞭解析類流。 該示例將運行,但必須使用不同的方法分析HTML,因爲width='90%'不再位於HTML中。

仍在研究正確的方法;將在我工作時發回。

+0

我相信你可以使用'class_' - 搜索時對於屬性,BeautifulSoup將檢查'class'。類也可以不使用任何關鍵字 - 'soup(「tr」,「fabrik_row_jos_fabrik_icc-ccs-piracymap2010_narrations」)' – 2013-03-05 10:37:00

0

必須有一個更好的辦法....

import urllib2 
from BeautifulSoup import BeautifulSoup 
page = urllib2.urlopen("http://www.icc-ccs.org/index.php?option=com_fabrik&view=table&tableid=534&calculations=0&Itemid=82") 
soup = BeautifulSoup(page) 
soup.find("table",{"class" : "fabrikTable"}) 
list1 = soup.table.findAll('p', limit=50) 
i = 0 
imax = 0 
for item in list1 : 
    imax = imax + 1 
while i < imax: 
    Itime = list1[i] 
    i = i + 2 
    Incident = list1[i] 
    i = i + 1 
    Inext = list1[i] 
    print "Time ", Itime 
    print "Incident", Incident 
    print " " 
    i = i + 1