2009-05-01 4 views
2

私は知っている限り、Python 2.5とBeautifulSoup 3.1.0.1を実行しているマシンをそれぞれ2台持っています。python-私のhtmlを誤って報告していますか?

は、私が使用して、http://utahcritseries.com/RawResults.aspxをこすりしようとしている:私のWindowsマシンに

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 

が、私は日付やイベント名のリストです正しい結果を取得します。私の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 

を得るとき、私、私のWindowsマシン上

print row 

、TRデータは、ソースHTMLとまったく同じに見えるということ。あります2番目のテーブル行のスタイルタグに注意してください。ここでは最初の2行です:私は最初の2つの行を印刷するとき、私の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 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> 

は、スタイル情報は、TRタグから削除され、それがそれぞれのTDフィールドに移動します。なぜこれが起こっているのか分かりません。 BeautifulSoupは他のすべての日付にフォントタグを入れているので、他の日付の値にはNoneが返されます。ここでは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が正しく動作するために取得するために何をする必要があります下に正しい結果が表示されていますか?

+0

クライアントのブラウザによってHTMLが異なるとお考えですか?あなたのサイトは、あなたのMacにするよりもWindowsマシンに別のHTMLを与えると言っていますか?これは珍しいことではありません。 –

+0

いいえ、私はプリントテーブルの出力が2つの異なるマシンで異なっていると言っています。ブラウザでは、HTMLは同じように見えます。 私が実際に使っているbeautifulSoupのバージョンを確認する方法は本当にわかりません。私のMacでは、BeautifulSoup 3.1 .egg /Library/Python/2.5/site-packagesにあります –

答えて

1

私は問題はurlib2要求している疑いがある、ないBeautifulSoup:

両方のマシンで、このコマンドで返されるあなたが私たちの生データの同じ部分を示している場合それは役立つかもしれない:

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

またはWeb標準を使用するには、Microsoft得る:)また

は、あなたがページをフェッチするために機械化を使用しませんでしたか?もしそうなら、そこに問題があるかもしれません。

2

documented problemsには、バージョン3.1のBeautifulSoupがあります。

あなたが実際に使用しているバージョンであることを再度確認したい場合は、そのバージョンをダウングレードしてください。

関連する問題