Как работает парсинг - PullRequest
       5

Как работает парсинг

0 голосов
/ 27 сентября 2010

Я пробую пример кода для отчета о пиратстве. Строка кода:

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

ищет суп для элемента td с атрибутом width="90%", верно? Он вызывает метод __init__ класса BeautifulStoneSoup, который в конечном итоге вызывает 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")

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Должен быть лучший способ ....

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
0 голосов
/ 28 сентября 2010

class является зарезервированным словом и не будет работать с этим методом.

Этот метод работает, но не возвращает список:

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

И я подтвердил поток классов дляразбор.Пример запустится, но HTML должен быть проанализирован разными методами, потому что width='90%' больше не присутствует в HTML.

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

...