リンクされたすべてのページのHTMLコードを取得するのは非常に簡単です。
難しいのは、探しているコンテンツを正確に抽出することです。タグ内のすべてのコードが必要な場合でも<body>
、これは大きな問題にはなりません。すべてのテキストの抽出も同様に簡単です。ただし、より具体的なサブセットが必要な場合は、さらに多くの作業を行う必要があります。
リクエストとBeautifulSoupモジュールをダウンロードすることをお勧めします(どちらも経由で利用可能easy_install requests/bs4
またはそれ以上pip install requests/bs4
)。リクエストモジュールを使用すると、ページを非常に簡単に取得できます。
次の例では、RSSフィードを取得し、3つのリストを返します。
linksoups
フィードからリンクされた各ページのBeautifulSoupインスタンスのリストです
linktexts
フィードからリンクされた各ページの表示テキストのリストです
linkimageurls
src
フィードからリンクされた各ページに埋め込まれたすべての画像の-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>…</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.
それはあなたのプロジェクトの大まかな出発点かもしれません。