0

スクレーパーの論理フロー:XMLフィードから抽出された記事のリンクは、self.raw_htmlというリストに入れられます。次に、次の[簡略化された]メソッドが呼び出されて、記事が含まれているコンテナーがフィルターで除外され、指定された記事からテキストが削除されます。

def fetch_article_contents(self):
    for article in self.raw_html:
        self.css_selector_type == 'class':
        soup = article.find(self.html_element,
                            self.css_selector)
        soup = soup.get_text()
        self.article_html.append(soup)
    return self.article_html

これはほとんどのフィードでうまく機能しますが、get_text()が呼び出されると、2つの注目すべき例外(Forbesと公式Googleブログ)が失敗し、次のメッセージが表示されます。

AttributeError: 'NoneType' object has no attribute 'get_text'

デバッグの最初の論理的な手順は、NoneTypeオブジェクトを返すものを確認することだったので、print type(soup)直前にスタックしましたsoup = soup.get_text()。私が見つけた:

<class 'bs4.element.Tag'> (25 times, condensed to save space)
<type 'NoneType'>

self.raw_htmlクラスが初期化されたときにlen(self.raw_html)によって検証されたように、Forbes XMLフィードをフェッチするときに現在29の記事があるので、これも奇妙なことに思います。

Google公式ブログは以下を返します:

<class 'bs4.element.Tag'> (just once this time)
<type 'NoneType'>

実際には、25のフェッチされた記事があります。

私が直面している問題は何ですか?ありがとう!

4

1 に答える 1

1

あなたは何self.html_elementであるかを示していませんが、メソッドがそれらを見つけていないことはself.css_selector明らかであり、を返します。article.findNone

于 2012-06-29T01:18:08.073 に答える