1. ホーム
  2. python

[解決済み] Python - AttributeError: 'NoneType' オブジェクトには 'findAll' という属性がありません。

2022-02-11 10:27:46

質問

私はウェブサイトをスクレイピングするために、私の最初の少しのパイソンコードを書きました。

import csv
import urllib2
from BeautifulSoup import BeautifulSoup

c = csv.writer(open("data.csv", "wb"))
soup = BeautifulSoup(urllib2.urlopen('http://www.kitco.com/kitco-gold-index.html').read())
table = soup.find('table', id="datatable_main")
rows = table.findAll('tr')[1:]

for tr in rows:
   cols = tr.findAll('td')
   text = []
   for td in cols:
       text.append(td.find(text=True))
   c.writerow(text)

ローカルでpyCharmというideでテストするとうまくいくのですが、CentOSが動いているサーバーで試すと、以下のエラーが出ます。

domainname.com [~/public_html/livegold]# python scraper.py
Traceback (most recent call last):
  File "scraper.py", line 8, in <module>
    rows = table.findAll('tr')[:]
AttributeError: 'NoneType' object has no attribute 'findAll'

私はリモートでインストールされたモジュールを持っていないと思います、私は2日間この上にハングアップしている任意のヘルプは非常に高く評価されます :)

解決方法は?

で発生する可能性のあるエラーを無視しています。 urllib2.urlopen もし何らかの理由でサーバーにそのページを表示しようとしてエラーが発生した場合、ローカルではテストしていないため、事実上空の文字列を渡していることになります ( '' ) または期待しないページ (404ページなど) を BeautifulSoup .

その結果、あなたの soup.find('table', id="datatable_main") 戻る None ドキュメントが期待しないものであるため。

サーバーで取得しようとしているページが取得できるようにするか、例外を適切に処理する必要があります。