Question

J'ai deux machines chacune, à ma connaissance, fonctionnant sous Python 2.5 et BeautifulSoup 3.1.0.1.

J'essaie de supprimer http://utahcritseries.com/RawResults.aspx , à l'aide de :

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

Sur ma machine Windows, j’obtiens le bon résultat, à savoir une liste de dates et de noms d’événements. Sur mon mac, je ne le fais pas. au lieu de cela, je reçois

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

Ce que je remarque, c'est que quand je

print row

sur ma machine Windows, les données tr ont exactement la même apparence que le code source HTML. Notez la balise de style sur la deuxième ligne du tableau. Voici les deux premières lignes:

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

Sur mon Mac, lorsque j'imprime les deux premières lignes, les informations de style sont supprimées de la balise tr et sont déplacées dans chaque champ td. Je ne comprends pas pourquoi cela se passe. J'obtiens None pour chaque autre valeur de date, car BeautifulSoup insère une balise de police autour de chaque date. Voici la sortie du Mac:

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

Mon script affiche le résultat correct sous Windows. Que dois-je faire pour que mon Mac fonctionne correctement?

Était-ce utile?

La solution

Je soupçonne que le problème provient de la requête urlib2 et non de BeautifulSoup:

Cela pourrait aider si vous montriez la même section de données brutes que celle renvoyée par cette commande sur les deux machines:

urllib2.urlopen(base_url)

Cette page semble pouvoir vous aider: http://bytes.com/groups/python/635923- construire-comme-get-request

La solution la plus simple consiste probablement simplement à détecter l'environnement dans lequel le script est exécuté et à modifier la logique d'analyse en conséquence.

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

Ou demandez à Microsoft d’utiliser les normes Web:)

De plus, n’avez-vous pas utilisé mécaniser pour récupérer les pages? Si c'est le cas, le problème est peut-être là.

Autres conseils

Il existe des problèmes documentés avec la version 3.1 de BeautifulSoup.

Vous pouvez vérifier que vous utilisez bien la version que vous utilisez et, le cas échéant, rétrograder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top