Ответ 1
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
Я открываю URL-адреса с помощью:
site = urllib2.urlopen('http://google.com')
И то, что я хочу сделать, так же подключается к прокси-серверу Я где-то говорил мне:
site = urllib2.urlopen('http://google.com', proxies={'http':'127.0.0.1'})
но это тоже не сработало.
Я знаю, что urllib2 имеет что-то вроде обработчика прокси, но я не могу вспомнить эту функцию.
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
Вам необходимо установить ProxyHandler
urllib2.install_opener(
urllib2.build_opener(
urllib2.ProxyHandler({'http': '127.0.0.1'})
)
)
urllib2.urlopen('http://www.google.com')
Чтобы использовать системные прокси по умолчанию (например, из переменной окружения http_support), для текущего запроса выполняется следующее (без его установки в urllib2 по всему миру):
url = 'http://www.example.com/'
proxy = urllib2.ProxyHandler()
opener = urllib2.build_opener(proxy)
in_ = opener.open(url)
in_.read()
Вы можете установить прокси с помощью переменных среды.
import os
os.environ['http_proxy'] = '127.0.0.1'
os.environ['https_proxy'] = '127.0.0.1'
urllib2
автоматически добавит обработчики прокси. Вам нужно установить прокси для разных протоколов отдельно, иначе они потерпят неудачу (с точки зрения отсутствия прокси-сервера), см. Ниже.
Например:
proxy = urllib2.ProxyHandler({'http': '127.0.0.1'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
# next line will fail (will not go through the proxy) (https)
urllib2.urlopen('https://www.google.com')
Вместо
proxy = urllib2.ProxyHandler({
'http': '127.0.0.1',
'https': '127.0.0.1'
})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
# this way both http and https requests go through the proxy
urllib2.urlopen('http://www.google.com')
urllib2.urlopen('https://www.google.com')
В дополнение к принятому ответу: Мой счёт дал мне ошибку
File "c:\Python23\lib\urllib2.py", line 580, in proxy_open
if '@' in host:
TypeError: iterable argument required
Решение заключалось в том, чтобы добавить http://перед строкой прокси:
proxy = urllib2.ProxyHandler({'http': 'http://proxy.xy.z:8080'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
urllib2.urlopen('http://www.google.com')
Можно также использовать запросы, если мы хотим получить доступ к веб-странице с помощью прокси. Код Python 3:
>>> import requests
>>> url = 'http://www.google.com'
>>> proxy = '169.50.87.252:80'
>>> requests.get(url, proxies={"http":proxy})
<Response [200]>
Также можно добавить несколько прокси.
>>> proxy1 = '169.50.87.252:80'
>>> proxy2 = '89.34.97.132:8080'
>>> requests.get(url, proxies={"http":proxy1,"http":proxy2})
<Response [200]>
Кроме того, установите прокси для сеанса командной строки Откройте командную строку, где вы можете запустить script
netsh winhttp set proxy YourProxySERVER:yourProxyPORT
запустите ваш script в этом терминале.
Как может urllib2 представить себя как подлинный браузер, так как многие скрипты блокируют скрипты со сбоем сайта?
Пример кода:
import sys
import urllib2
from bs4 import BeautifulSoup
parser = "html.parser"
quote_page = "https://www.bloomberg.com/quote/SPX:IND"
proxy = urllib2.ProxyHandler({'http': 'myproxy:3128'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, parser)
print soup.prettify()