5

python urlib のようなものを使用して、ウェブサイト全体をダウンロードする必要があります

import urllib

site = urllib.urlopen('http://www.mathrubumi.com/index.php')
site_data = site.read()

最初のページのみをダウンロードします。それが index.php です。Web サイト全体をダウンロードするコードを作成するにはどうすればよいですか。ループすることで?? または他の方法はありますか?たとえばwget、コードではループは必要ありません

wget \ --recursive \--no-clobber \ --page-requisites \ --html-extension \  --convert-links \
     --restrict-file-names=windows \ --domains website.org \    --no-parent \    www.website.org/tutorials/html/
4

3 に答える 3

7

を使用して完全な Web サイトをダウンロードする場合urllibは、すべてのページを解析し、すべてのリンクを見つけてダウンロードする必要があります。実行可能ですが、正しく行うのは難しい場合があります。

純粋な python ソリューションが必要な場合は、scrapyを調べるか、スクリプトから呼び出すwgetことをお勧めします。

于 2013-10-16T08:54:26.433 に答える
1

ユーザー (別の質問で尋ねられたが削除された理由..) が代わりに BeautifulSoup を使用することへの参照を指摘したため、すべての<a href="something.html">something</a> リンクを取得してローカルに保存する実際の例を次に示します。

import urllib2
from BeautifulSoup import BeautifulSoup, SoupStrainer
from os.path import basename

def store_links(page):
    with open(basename(page), 'wb') as fh:
        site = urllib.urlopen(page)
        site_data = site.read()

        fh.write(site_data)

        for link in BeautifulSoup(site_data, parseOnlyThese=SoupStrainer('a')):
            if link.has_attr('href'):
                store_links(link['href'])

store_links('http://www.nytimes.com')

注意: 現在ロックダウンされたマシン上でテストしていないため、構文エラーが予想される場合がありますが、考え方は同じです:

  1. リンクが見つかるたびに自分自身を呼び出す再帰関数を作成する
  2. その再帰関数に出発点を与えて、それを夢中にさせます
于 2013-10-16T10:00:08.230 に答える
0
  1. urlencode メソッドを使用していない場合は、ヘッダーと UA を設定できる urllib2 を使用できます。または、より多くの API をサポートするリクエストを使用できます。こちらのドキュメントを参照してください
  2. urllib を使用して Web サイト全体をダウンロードするには、Web サイトでディレクトリ リストを有効にする必要があります。これは、ほとんどのサイト所有者が .htaccess で設定することによって許可されません。
于 2013-10-16T09:05:59.393 に答える