0

BlogspotやWordpressのブログ/その他のWebサイトに及ぶ可能性のあるWebサイトの記事(投稿)を読み取るプログラムを作成しようとしています。HTML5/XHTMLなどで書かれている可能性のあるほとんどすべてのWebサイトと互換性のあるコードを書くことに関して。私はコンテンツを抽出するための根拠としてRSS/Atomフィードを使用することを考えました。

ただし、RSS / Atomフィードには通常、Webサイトの記事全体が含まれていない可能性があるため、を使用してフィードからすべての「投稿」リンクを収集しfeedparser、それぞれのURLから記事のコンテンツを抽出したいと思いました。

Webサイト内のすべての記事のURL(要約を含む。つまり、フィードに表示される記事のコンテンツ)を取得できましたが、それぞれのURLを使用する必要がある記事データ全体にアクセスしたいと思います。

BeautifulSoupなどのさまざまなライブラリ(さまざまなHTML / XMLパーサー)に出くわしlxmlましたが、記事の「正確な」コンテンツを取得する方法が本当にわかりません(「正確な」とは、すべてのハイパーリンク、iframe、スライドショーなどはまだ存在します。CSS部分は必要ありません)。

だから、誰かが私を助けることができますか?

4

1 に答える 1

3

リンクされたすべてのページのHTMLコードを取得するのは非常に簡単です。

難しいのは、探しているコンテンツを正確に抽出することです。タグ内のすべてのコードが必要な場合でも<body>、これは大きな問題にはなりません。すべてのテキストの抽出も同様に簡単です。ただし、より具体的なサブセットが必要な場合は、さらに多くの作業を行う必要があります。

リクエストとBeautifulSoupモジュールをダウンロードすることをお勧めします(どちらも経由で利用可能easy_install requests/bs4またはそれ以上pip install requests/bs4)。リクエストモジュールを使用すると、ページを非常に簡単に取得できます。

次の例では、RSSフィードを取得し、3つのリストを返します。

  • linksoupsフィードからリンクされた各ページのBeautifulSoupインスタンスのリストです
  • linktextsフィードからリンクされた各ページの表示テキストのリストです
  • linkimageurlssrcフィードからリンクされた各ページに埋め込まれたすべての画像の-urlを含む リストのリストです
    • 例えば[['/pageone/img1.jpg', '/pageone/img2.png'], ['/pagetwo/img1.gif', 'logo.bmp']]
import requests, bs4

# request the content of the feed an create a BeautifulSoup object from its content
response = requests.get('http://rss.slashdot.org/Slashdot/slashdot')
responsesoup = bs4.BeautifulSoup(response.text)

linksoups = []
linktexts = []
linkimageurls = []

# iterate over all <link>…&lt;/link> tags and fill three lists: one with the soups of the
# linked pages, one with all their visible text and one with the urls of all embedded
# images
for link in responsesoup.find_all('link'):
    url = link.text
    linkresponse = requests.get(url) # add support for relative urls with urlparse
    soup = bs4.BeautifulSoup(linkresponse.text)
    linksoups.append(soup)

    linktexts.append(soup.find('body').text)
    # Append all text between tags inside of the body tag to the second list

    images = soup.find_all('img')
    imageurls = []
    # get the src attribute of each <img> tag and append it to imageurls
    for image in images:
        imageurls.append(image['src'])
    linkimageurls.append(imageurls)

# now somehow merge the retrieved information. 

それはあなたのプロジェクトの大まかな出発点かもしれません。

于 2012-06-02T16:06:28.537 に答える