문제

내가 아는 한, Python 2.5와 BeautifulSoup 3.1.0.1을 실행하는 두 대의 기계가 있습니다.

나는 긁어 내려고 노력하고있다 http://utahcritseries.com/rawresults.aspx, 사용 :

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

Windows 컴퓨터에서는 날짜와 이벤트 이름 목록 인 올바른 결과를 얻습니다. 내 Mac에서는 그렇지 않습니다. 대신, 나는 얻는다

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

내가 주목하는 것은 내가 때입니다

print row

내 Windows 시스템에서 TR 데이터는 소스 HTML과 정확히 동일하게 보입니다. 두 번째 테이블 행의 스타일 태그를 기록하십시오. 처음 두 줄은 다음과 같습니다.

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

Mac에서 처음 두 행을 인쇄 할 때 스타일 정보가 TR 태그에서 제거되고 각 TD 필드로 이동됩니다. 왜 이런 일이 일어나고 있는지 이해가 안 돼요. BeautifulSoup이 다른 날짜에 글꼴 태그를 넣고 있기 때문에 다른 날짜 값에 대해 아무것도 얻지 못합니다. 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>

내 스크립트는 Windows에 올바른 결과를 표시하고 있습니다. Mac이 올바르게 작동하도록하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

문제가 BeautifulSoup이 아닌 URLIB2 요청에 있다고 생각합니다.

두 기계 에서이 명령에서 반환 한 원시 데이터의 동일한 섹션을 보여 주면 도움이 될 수 있습니다.

urllib2.urlopen(base_url)

이 페이지는 도움이 될 수있는 것 같습니다.http://bytes.com/groups/python/635923-building-browser-like-get-request

가장 간단한 솔루션은 아마도 스크립트가 실행되는 환경을 감지하고 그에 따라 구문 분석 로직을 변경하는 것입니다.

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

또는 Microsoft가 웹 표준을 사용하도록하십시오 :)

또한 Mechanize를 사용하여 페이지를 가져 오지 않았습니까? 그렇다면 문제가있을 수 있습니다.

다른 팁

거기 있습니다 문서화 된 문제 BeautifulSoup의 버전 3.1.

실제로 사용중인 버전 인 경우, 다운 그레이드 인 경우 더블 점검을 원할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top