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 回答