0
def download(source_url):
    try:
        socket.setdefaulttimeout(20)
        agents = ['Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1041.0 Safari/535.21','Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0']
        ree = urllib2.Request(source_url)
        ree.add_header('User-Agent',random.choice(agents))
        resp = urllib2.urlopen(ree)
        htmlSource = resp.read()
        return htmlSource
    except Exception, e:
        print e
        return ""

このダウンロード機能を書きました。301/302 で動作させるにはどうすればよいですか?

例: http://tumblr.com/tagged/long-readsこの URL では関数が機能しません。

4

2 に答える 2

1

まず、HTTP 応答コードを取得する必要があります。これを見てください。

コードが 30x の場合、新しい URL を取得する必要があります。これを見てください。

次に、関数 download() を新しい URL で再帰的に呼び出すことができます。

また、無限ループを回避するために、リダイレクト カウンターとして 1 つのパラメーターを追加する必要があります。

于 2012-05-07T12:06:49.973 に答える
0

リダイレクト (301/2) コードが返された場合、urllib2そのリダイレクトに自動的に従います。

この関連する質問を見てください。あなたのケースでリダイレクトに従わない場合、この記事ではリダイレクトの処理について詳しく調べます。

于 2012-05-07T12:07:09.837 に答える