Pergunta

Eu tenho duas máquinas cada, para o melhor de meu conhecimento, executando python 2,5 e BeautifulSoup 3.1.0.1.

Eu estou tentando raspar http://utahcritseries.com/RawResults.aspx , usando :

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

Na minha máquina Windows, eu obter o resultado correto, que é uma lista de datas e nomes de eventos. No meu Mac, eu não sei. em vez disso, eu recebo

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

O que eu estou percebendo é que quando eu

print row

na minha máquina Windows, os olhares de dados tr exatamente o mesmo que o html fonte. Observe a marca de estilo na segunda linha da tabela. Eis as duas primeiras linhas:

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

No meu mac quando eu imprimir as duas primeiras linhas, as informações de estilo é removido da tag tr e se mudou para cada campo td. Eu não entendo porque isso está acontecendo. Estou ficando Nenhum para qualquer outro valor data, porque BeautifulSoup está colocando uma marca de fonte em torno de cada outra data. Aqui está a saída do 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>

Meu script está exibindo o resultado correto no windows-o que eu preciso fazer para obter o meu Mac para o trabalho corretamente?

Foi útil?

Solução

Eu suspeito que o problema é no pedido urlib2, não BeautifulSoup:

Pode ajudar se você mostrar-nos a mesma seção dos dados brutos como retornado por esse comando em ambas as máquinas:

urllib2.urlopen(base_url)

Esta página parece que pode ajudar: http://bytes.com/groups/python/635923- edifício-browser like--get-request

A solução mais simples é provavelmente apenas para detectar qual ambiente o script está em execução e mudar a lógica de análise em conformidade.

>>> 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 obter a Microsoft para usar padrões web:)

Além disso, não é usar mecanizar para buscar as páginas? Se assim for, o problema pode estar lá.

Outras dicas

problemas documentados com a versão 3.1 do BeautifulSoup.

Você pode querer verifique que é a versão que você na verdade está usando, e se assim for rebaixamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top