2010-09-27 15 views
-1

J'essaie l'exemple de code pour le rapport de piratage. La ligne de code:Comment fonctionne l'analyse

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

seraches la soupe pour un élément td avec l'attribut width="90%", correct? Il appelle la méthode __init__ de la classe BeautifulStoneSoup, qui appelle éventuellement SGMLParser.__init__(self)

Ai-je raison de dire que le flux de classe est supérieur?

La soupe se présente comme suit dans le rapport maintenant:

<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> 

Il n'y a pas de balisage width dans le texte. J'ai changé la ligne de code qui est à la recherche:

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

Il semble que class est un mot réservé, peut-être?

Comment puis-je obtenir l'exemple de code actuel à exécuter, et a plus changé dans l'application que la sortie HTML?

L'URL J'utilise:

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

Les balises HTML ont été retirées de ma soupe NewB

Répondre

0

class est un mot réservé et ne fonctionnera pas avec cette méthode.

Cette méthode fonctionne mais ne retourne pas la liste:

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

Et je confirme le flux de classe pour l'analyse syntaxique. L'exemple va s'exécuter, mais le code HTML doit être analysé avec différentes méthodes car le width='90%' n'est plus dans le code HTML.

Toujours en train de travailler sur les méthodes appropriées; postera quand je l'aurai fonctionné.

+0

Je crois que vous pouvez utiliser' class_' - lors de la recherche pour les attributs, BeautifulSoup vérifiera 'class'. La classe fonctionne aussi sans aucun mot-clé -' soup ("tr", "fabrik_row_jos_fabrik_icc-ccs-piracymap2010_narrations") ' –

0

Il doit y avoir une meilleure façon ....

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