0

現在、私は暫定的にこのコードを持っています:

import json
import urllib2  

with open('proxies.txt') as proxies:
    for line in proxies:
        proxy = json.loads(line)
        proxy_handler = urllib2.ProxyHandler(proxy)
        opener = urllib2.build_opener(proxy_handler)
        urllib2.install_opener(opener)
with open('urls.txt') as urls:
    for line in urls:
        url = line.rstrip()
        data = urllib2.urlopen(url).read()
        print data

私のproxies.txtファイルは次のとおりです。

{"https": "https://94.142.27.4:3128"}
{"http": "http://118.97.95.174:8080"}
{"http": "http://66.62.236.15:8080"}

私の urls.txt ファイルは次のとおりです。

http://www.google.com
http://www.facebook.com
http://www.reddit.com

すべてのプロキシをインストールしてから、すべてのプロキシがインストールされたリスト内の各 URL を処理しているようです。私が本当に欲しいのは、各プロキシを介して個別に各 URL にアクセスすることです。そう

  1. プロキシ 1 を介して url1 にアクセスする
  2. プロキシ 1 を介して url2 にアクセスする
  3. プロキシ 1 を介して url3 にアクセスする
  4. プロキシ 2 を介して url1 にアクセスする
  5. プロキシ 2 を介して url2 にアクセスする
  6. プロキシ 2 を介して url3 にアクセスする
  7. プロキシ 3 を介して url1 にアクセスする
  8. プロキシ 3 を介して url2 にアクセスする
  9. プロキシ 3 を介して url3 にアクセスする

これを行う方法はありますか?すでにこれを行っていますか?プロキシが実際に何であるかを誤解していますか? install_opener が実際に行うことを誤解していますか?

4

1 に答える 1

3

これがまさにあなたが望むものかどうかはわかりませんが...

すべてのプロキシを介してすべての URL を試したいので、itertools.productすべての組み合わせを簡単に作成するために使用できます。

import itertools

with open('proxies.txt') as proxies:
    with open('urls.txt') as urls:
        for (proxie, url) in itertools.product(proxies, urls):
            print "access", url.rstrip(), "using", proxie.rstrip()

もちろん、代わりにprint実際のコードを挿入する必要があります。


そうは言っても、元のコードの唯一の本当の問題はおそらくインデントです。ネストされたループが必要です。したがって、次のように書く必要があります。

with open('proxies.txt') as proxies:
    for line in proxies:
        proxy = json.loads(line)
        proxy_handler = urllib2.ProxyHandler(proxy)
        opener = urllib2.build_opener(proxy_handler)
        urllib2.install_opener(opener)

        with open('urls.txt') as urls:
            for line in urls:
                url = line.rstrip()
                data = urllib2.urlopen(url).read()
                print data
于 2013-08-16T22:02:50.423 に答える