1

日付 (1 月 1 日、1 月 2 日、....、12 月 31 日) を扱うすべてのウィキペディアのページを繰り返し処理しています。各ページに、その日が誕生日の人の名前を出しています。ただし、コードの途中 (4 月 27 日) で、次の警告が表示されます。

WARNING:root:Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.

次に、すぐにエラーが発生します。

Traceback (most recent call last):
    File "wikipedia.py", line 29, in <module>
        section = soup.find('span', id='Births').parent
AttributeError: 'NoneType' object has no attribute 'parent'

基本的に、4 月 27 日までたどり着いた後、この警告とエラーをスローすることにした理由がわかりません。以下は4月27日のページです。

4月27日…

私が言えることは、これがこのように起こる理由は何も変わらないということです。id="Births" のスパンがまだあります。

これは、すべてのものを呼び出すコードです。

    site = "http://en.wikipedia.org/wiki/"+a+"_"+str(b)
    hdr = {'User-Agent': 'Mozilla/5.0'}
    req = urllib2.Request(site,headers=hdr)    
    page = urllib2.urlopen(req)
    soup = BeautifulSoup(page)

    section = soup.find('span', id='Births').parent
    births = section.find_next('ul').find_all('li')

    for x in births:
        #All the regex and parsing, don't think it's necessary to show

エラーは、次の行でスローされます。

section = soup.find('span', id='Births').parent

4 月 27 日までにはたくさんの情報が得られていますが (それぞれ約 35,000 要素の 8 つのリスト)、それが問題になるとは思いません。誰かに何かアイデアがあれば、私はそれを感謝します。ありがとう

4

1 に答える 1

4

Wikipedia サーバーがそのページを gzip 圧縮して提供しているようです。

>>> page.info().get('Content-Encoding')
'gzip'

リクエストに accept-encoding ヘッダーがないことは想定されていませんが、まあ、他の人のサーバーを操作するときはそれが命です。

gzip 圧縮されたデータを操作する方法を示すソースはたくさんあります

そして、ここに別のものがあります: python urllib2 は、Web ページから取得した gzip データを自動的に解凍しますか?

于 2013-07-16T22:41:11.330 に答える