Frage

Ich habe zwei Maschinen je nach bestem meinem Wissen laufen Python 2.5 und BeautifulSoup 3.1.0.1.

Ich versuche http://utahcritseries.com/RawResults.aspx zu kratzen, mit :

from BeautifulSoup import BeautifulSoup
import urllib2

base_url = "http://www.utahcritseries.com/RawResults.aspx"

data=urllib2.urlopen(base_url)
soup=BeautifulSoup(data)
i = 0
table=soup.find("table",id='ctl00_ContentPlaceHolder1_gridEvents')
#table=soup.table
print "begin table"
for row in table.findAll('tr')[1:10]:
    i=i + 1
    col = row.findAll('td')
    date = col[0].string
    event = col[1].a.string
    confirmed = col[2].string
    print '%s - %s' % (date, event)
print "end table"
print "%s rows processed" % i

Auf meinem Windows-Rechner, bekomme ich das richtige Ergebnis, das eine Liste von Daten und Ereignisnamen ist. Auf meinem Mac, das tue ich nicht. stattdessen ich

3/2/2002 - Rocky Mtn Raceway Criterium
None - Rocky Mtn Raceway Criterium
3/23/2002 - Rocky Mtn Raceway Criterium
None - Rocky Mtn Raceway Criterium
4/2/2002 - Rocky Mtn Raceway Criterium
None - Saltair Time Trial
4/9/2002 - Rocky Mtn Raceway Criterium
None - DMV Criterium
4/16/2002 - Rocky Mtn Raceway Criterium

Was ich zu bemerken ist, dass, wenn ich

print row

auf meinem Windows-Rechner, sieht die tr Daten genau die gleiche wie die Quelle html. Beachten Sie den Style-Tag auf dem zweiten Tabellenzeile. Hier sind die ersten beiden Zeilen:

<tr>
<td>
 3/2/2002
</td>
<td>
 <a href="Event.aspx?id=226">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=226">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

<tr style="color:#333333;background-color:#EFEFEF;">
<td>
 3/16/2002
</td>
<td>
 <a href="Event.aspx?id=227">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=227">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

Auf meinem Mac, als ich die ersten beiden Zeilen drucken, wird die Stilinformationen aus der tr-Tag entfernt und es ist in jedem td Feld bewegt. Ich verstehe nicht, warum dies geschieht. Ich erhalte keine für jeden anderen Datumswert, weil BeautifulSoup ein font-Tag um jedes andere Datum setzen. Hier ist die Mac-Ausgabe:

<tr>
<td>
 3/2/2002
</td>
<td>
 <a href="Event.aspx?id=226">
  Rocky Mtn Raceway Criterium
 </a>
</td>
<td>
 Confirmed
</td>
<td>
 <a href="Event.aspx?id=226">
  Points
 </a>
</td>
<td>
 <a disabled="disabled">
  Results
 </a>
</td>
</tr>

<tr bgcolor="#EFEFEF">
<td>
 <font color="#333333">
  3/16/2002
 </font>
</td>
<td>
 <font color="#333333">
  <a href="Event.aspx?id=227">
   Rocky Mtn Raceway Criterium
  </a>
 </font>
</td>
<td>
 <font color="#333333">
  Confirmed
 </font>
</td>
<td>
 <font color="#333333">
  <a href="Event.aspx?id=227">
   Points
  </a>
 </font>
</td>
<td>
 <font color="#333333">
  <a disabled="disabled">
   Results
  </a>
 </font>
</td>
</tr>

Mein Skript wird das richtige Ergebnis unter Anzeigen von Windows-was muss ich tun, um zu meinem Mac bekommen richtig zu arbeiten?

War es hilfreich?

Lösung

Ich vermute, dass das Problem ist in der urlib2 Anfrage nicht BeautifulSoup:

Es könnte helfen, wenn Sie uns den gleichen Abschnitt der Rohdaten zeigen, wie durch diesen Befehl auf beiden Maschinen zurückgegeben:

urllib2.urlopen(base_url)

Diese Seite sieht aus wie es helfen kann: http://bytes.com/groups/python/635923- Gebäude-Browser-like-get-Anfrage

Die einfachste Lösung ist wahrscheinlich nur zu erkennen, welche Umgebung das Skript die Parsing-Logik in und ändern dementsprechend ausgeführt wird.

>>> import os
>>> os.uname() 
('Darwin', 'skom.local', '9.6.0', 'Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386', 'i386')

oder erhalten Microsoft-Standards zu verwenden:)

Auch Sie nicht verwenden mechanisieren, die Seiten zu holen? Wenn ja, kann das Problem dort sein.

Andere Tipps

Es gibt dokumentiert Probleme mit Version 3.1 von BeautifulSoup.

Sie können verdoppeln wollen prüfen, ob die Version, die Sie tatsächlich verwenden, und wenn ja, degradieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top