0

Python と Beautiful Soup で Web スクレイパーを作成しました

特定の要素が存在する場合もあれば、存在しない場合もあります。私はそれらのトンを持っています。「find」および/または「find_all」ごとにカスタム例外を設定することは、私にとって本当に意味がありません

スクレーパーが例外で停止しないように、エラーを無視したいだけです。私の端末からのエラー出力は次のとおりです。

Traceback (most recent call last):
  File "listing-scraper.py", line 80, in <module>
    'engine_size':soup.find("span",{"id":"infoEngine Size"}).contents[0],
AttributeError: 'NoneType' object has no attribute 'contents'

どうすれば続行できますか?

ここに私のソースコードの抜粋があります - あなたはそれがどのように設定されているかを見ることができます. (親切にしてください、私はPythonが初めてです)

    dealer_info = {
        'name':dealer_box.find("h4").contents[0],
        'address':dealer_address,
        'phone':re.sub(r'[^\d.]+','',soup.find("div",{"class":"PhoneNumber"}).contents[0]),
        'logo':soup.find("div",{"class":"dealerLogo"}).img['src'],
        'about':dealer_about,
        'website':website,
        'video':dealer_video
    }

    thumbnails = soup.find("div",{"class":"imageThumbs"}).find_all('img')
    dealer_thumbnails = []

    for thumbnail in thumbnails:
        dealer_thumbnails.append(thumbnail['src'])

    motorcycle = {
        'insert_date':time.time() * 1000,
        'year':soup.find("span",{"id":"infoYear"}).contents[0],
        'make':soup.find("span",{"id":"infoMake"}).contents[0],
        'model':soup.find("span",{"id":"infoModel"}).contents[0],
        'type':soup.find("span",{"id":"infoType"}).contents[0],
        'location':soup.find("span",{"id":"infoLocation"}).contents[0],
        'color':soup.find("span",{"id":"infoColor"}).contents[0],
        'engine_size':soup.find("span",{"id":"infoEngine Size"}).contents[0],
        'description':description,
        'price':soup.find("h3",{"class":"askingPriceNumber"}).contents[1],
        'thumbnails':dealer_thumbnails,
        'dealer_info':dealer_info
    }

    listing.update(motorcycle)
4

1 に答える 1

2

次のようなものを検討してください。

def getcontents(item, index):
    if item is None:
        return None
    return item.contents[index]

motorcycle = {
        'insert_date':time.time() * 1000,
        'year':getcontents(soup.find("span",{"id":"infoYear"}), 0),
        ...

一般に、そもそも例外の発生を回避できる場合は、例外を無視すべきではありません。

于 2012-05-31T17:24:19.117 に答える