0

そのため、特定の URL を探してメールボックスをスクレイピングするために使用するコードがいくつかあります。これが完了すると、links.txt というファイルが作成されます。

そのファイルに対してスクリプトを実行して、そのリストにある現在のすべての URL の出力を取得したいと考えています。私が持っているスクリプトでは、一度に URL を確認することしかできません

import urllib2

for url in ["www.google.com"]:

    try:
        connection = urllib2.urlopen(url)
        print connection.getcode()
        connection.close()
    except urllib2.HTTPError, e:
        print e.getcode()
4

2 に答える 2

4

使用リクエスト:

import requests

with open(filename) as f:
    good_links = []
    for link in file:
        try:
            r = requests.get(link.strip())
        except Exception:
            continue
        good_links.append(r.url) #resolves redirects

また、requests.getの呼び出しをヘルパー関数に抽出することも検討できます。

def make_request(method, url, **kwargs):
    for i in range(10):
        try:
            r = requests.request(method, url, **kwargs)
            return r
        except requests.ConnectionError as e:
            print e.message
        except requests.HTTPError as e:
            print e.message
        except requests.RequestException as e:
            print e.message
    raise Exception("requests did not succeed")
于 2012-08-13T21:29:50.300 に答える
1

すでに URL のリストを繰り返し処理していることを考えると、この変更を行うのは簡単です。

import urllib2

for url in open("urllist.txt"):   # change 1

    try:
        connection = urllib2.urlopen(url.rstrip())   # change 2
        print connection.getcode()
        connection.close()
    except urllib2.HTTPError, e:
        print e.getcode()

ファイルを反復処理すると、ファイルの行が返されます (行末を含む)。URL でを使用rstrip()して、行末を取り除きます。

他にも改善点があります。たとえばwith、ファイルが閉じていることを確認するために使用することを提案する人もいます。これは良い方法ですが、このスクリプトではおそらく必要ありません。

于 2012-08-13T21:35:57.007 に答える