【问题标题】:Proxy configuration is not working in Python代理配置在 Python 中不起作用
【发布时间】:2020-05-23 10:54:31
【问题描述】:

我正在尝试在进行网络抓取时轮换我的 IP,但是当我检查 IP 时它似乎不起作用,因为我执行此过程总是相同的。下面是我正在使用的代码:

代码:

import requests
from bs4 import BeautifulSoup
import random

headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 5.1.1; SM-G928X Build/LMY47X) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36'}

def get_free_proxies():
    url = "https://free-proxy-list.net/"
    # get the HTTP response and construct soup object
    soup = BeautifulSoup(requests.get(url).content, "html.parser")
    proxies = list()
    for row in soup.find("table", attrs={"id": "proxylisttable"}).find_all("tr")[1:]:
        tds = row.find_all("td")
        try:
            ip = tds[0].text.strip()
            port = tds[1].text.strip()
            host = f"{ip}:{port}"
            proxies.append(host)
        except IndexError:
            continue
    return proxies

def get_session(proxies):
    #Construct an HTTP session
    session = requests.Session()
    #choose one random proxy
    proxy = random.choice(proxies)
    session.proxies = {"http": proxy, "https": proxy}
    #session.proxies.update(proxy)
    return session

proxies = get_free_proxies()

for i in range(5):
    session = get_session(proxies)
    
    print("Request page with IP:", session.get("http://icanhazip.com",timeout=1.5).text.strip())
    

而且输出的始终是同一个IP,没有更新,顺便说一下是我的电脑IP

有谁知道失败的原因吗?

谢谢大家

【问题讨论】:

  • 除了免费代理的超时,您的代码似乎运行得很好。
  • 尝试通过所有代理,而不是使用 random.choice,以找出问题所在。

标签: python web-scraping proxy python-requests


【解决方案1】:

也许你已经设置了环境变量http_proxy,并且在发送请求时,使用了这个变量中指定的代理。要更改此行为,您只需在创建会话时将属性 trust_env 设置为 False

def get_session(proxies):
    #Construct an HTTP session
    session = requests.Session()
    #choose one random proxy
    proxy = random.choice(proxies)
    session.proxies = {"http": proxy, "https": proxy}
    session.trust_env = False
    return session

【讨论】:

  • 谢谢 Zanuda,我已经在我的代码中插入了它,但出现了以下内容:TypeError: Cannot mix str and non-str arguments Do you know why?
  • 您能否指出在哪一行代码中引发了此异常?
  • 在最后一行,当我对页面进行最终请求时,打印。但最后我解决了这个问题,这是因为我在代理中没有正确的方案。我的意思是我的代理之前没有 http 或 https,添加它问题就解决了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多