-1

多数の HTML ファイル (8000 以上) をスキャンする必要があるプロジェクトに取り組んでいます。これらのファイルの一部は破損していますが、これはファイルのソースの必然的な結果であり、修正することはできません。

私は BeautifulSoup4 を使用してデータを見つけて抽出することにしました。このコードは次のとおりです。

from bs4 import BeautifulSoup

data = open('data\file.html', encoding='utf-8')
soup = BeautifulSoup(data)

tag = soup.find('strong', text="Heading:")

split_tag = str(tag.next_sibling.next_element.next_element).split(", ")

それが行うことは、ファイルを開き、テキスト「Heading:」を含む強力なタグを検索することです。次に、このタグの内容をカンマで分割します。

ただし、ソース ファイルが破損している場合は、"Heading:" というテキストを含む強力なタグがありません。したがって、「None」を返し、next_sibling がないため、split_tag で AttributeError が発生します。

次の方法を使用してこれを修正しようとしました。

try:
    split_tag = str(tag.next_sibling.next_element.next_element).split(", ")
except AttributeError:
    pass
else:
    split_tag = str(tag.next_sibling.next_element.next_element).split(", ")

これはうまくいきませんでした。これも関数として表現しようとしましたが、うまくいきませんでした。

だから私はあなたに目を向けます。私がやりたいのは、コンテンツがある場合はコンマでコンテンツを分割することです。そうでない場合、スクリプトはパスする必要があります。

私はどんな援助にもとても感謝しています!

4

1 に答える 1

2

例外ハンドラを書き直す方法は次のとおりです。そのような見出しがない場合、長さゼロのタグのリストを取得することを期待する必要があります。

from bs4 import BeautifulSoup

data = open('data\file.html', encoding='utf-8')
soup = BeautifulSoup(data)

tag = soup.find('strong', text="Heading:")

try:
    split_tag = str(tag.next_sibling.next_element.next_element).split(", ")
except AttributeError:
    split_tag = []  # zero-length list of tags

しかし、この場合、何も見つからないときにが戻るifため、単純なステートメントでうまくいくはずです。soup.find()None

from bs4 import BeautifulSoup

data = open('data\file.html', encoding='utf-8')
soup = BeautifulSoup(data)

tag = soup.find('strong', text="Heading:")

if tag is None:
    split_tag = []
else:
    split_tag = str(tag.next_sibling.next_element.next_element).split(", ")

をチェックするときは、上で示したように、オブジェクト IDNoneのテストを使用するのが最善です。is

于 2012-04-11T06:59:00.223 に答える