首页 文章

无法以正确的方式使用代理

提问于
浏览
0

我在python中编写了一个脚本来抓取通过代理生成的请求的URL . 我在我的脚本中使用了 shuffle() 来随机获取代理 . 脚本在某种程度上做得很好 . 此脚本的问题是当它无法使用任何有效的代理时,由于循环,它会转到另一个 url . 如何以这种方式纠正我的脚本,以便它将尝试使用列表中的每个代理(如果需要)来获取所有 urls .

这是我的尝试:

import requests
from random import shuffle

url = "https://stackoverflow.com/questions?page={}&sort=newest"

def get_random_proxies():
    proxies = ['35.199.8.64:80', '50.224.173.189:8080', '173.164.26.117:3128']
    shuffle(proxies)
    return iter(proxies)

for link in [url.format(page) for page in range(1,6)]:
    proxy = next(get_random_proxies())
    try:
        response = requests.get(link,proxies={"http": "http://{}".format(proxy) , "https": "http://{}".format(proxy)})
        print(f'{response.url}\n{proxy}\n')
    except Exception:
        print("something went wrong!!" + "\n")
        proxy = next(get_random_proxies_iter())

输出我有:

https://stackoverflow.com/questions?page=1&sort=newest
35.199.8.64:80

https://stackoverflow.com/questions?page=2&sort=newest
50.224.173.189:8080

something went wrong!!

https://stackoverflow.com/questions?page=4&sort=newest
50.224.173.189:8080

something went wrong!!

您可以看到两个网址 'page=3&sort=newest''page=5&sort=newest' 没有响应,而我的两个代理仍在工作 .

后记:他们是免费代理,所以我故意发表 .

1 回答

  • 2

    关于什么:

    def get_random_proxies():
        proxies = ['35.199.8.64:80', '50.224.173.189:8080', '173.164.26.117:3128']
        shuffle(proxies)
        return proxies
    
    for link in [url.format(page) for page in range(1,6)]:
        for proxy in get_random_proxies():
            try:
                response = requests.get(link,proxies={"http":proxy , "https": proxy})
                print(f'{response.url}\n{proxy}\n')
                break  # success, stop trying proxies
            except Exception:
                print("something went wrong!!" + "\n")
    

    我不确定 return(iter(...))next(result) 的计划是什么,但更传统的方法只是返回列表,然后根据需要循环覆盖它的某些部分 . 你已经制作了这个列表,返回它不需要额外的努力 .

相关问题