Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.92/999: Рейтинг темы: голосов - 999, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47

Как скачать страницу через прокси-сервер?

02.09.2013, 17:21. Показов 190605. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Вернулся к простенькой задачке по парсингу сайтов. Но столкнулся с следующей бедой, на работе подключение к интернету осуществляется с помощью прокси сервера, в одной из тем мне написали решение данной проблемы, но я не уверен что понял. Вот и прошу собственно помощи. Вот сам код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import lxml
import urllib.request
url = "http://google.ru/"
 
https_proxy = ":3128"
 
proxyDict = { 
             
              "https" : https_proxy
              
            }
 
r = requests.get(url,  proxies=proxyDict)
doc = lxml.html.document_fromstring(r.read())
И собственно ошибка.

Python
1
2
3
4
Traceback (most recent call last):
  File "C:/Python32/xd", line 13, in <module>
    r = requests.get(url,  proxies=proxyDict)
NameError: name 'requests' is not defined
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2013, 17:21
Ответы с готовыми решениями:

Как скачать файл через прокси
Как собственно скачать файл через прокси HTTP,SOCKS4 или SOCKS5

Как заставить nginx ходить на урл через другой через прокси сервер?
Ситуация следующая. Сервер_1 - nginx, его надо настроить Сервер_2 - прокси сервер, прокинут доступ только от Сервера_1, позволяет...

Прокси-сервер на nginx периодически редиректит на домен, который открываю через прокси
Добрый день! Есть обычный сайт (пусть будет domain.ru) , а есть прокси-сервер на vds который доступен в адресной строке по домену...

46
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
04.09.2013, 21:39
Студворк — интернет-сервис помощи студентам
Lamerok1, не-не, куда вы там полезли, почитайте тут
1
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.09.2013, 21:43
Python
1
2
3
4
>>> s = '<div class="t_0"><b>+<span class="otstup"></span>21</b></div>'
>>> print('{}{}'.format(s[20], s[49:-10]))
+21
>>>
1
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
04.09.2013, 22:15

Не по теме:

accept, эх, зачем, человек бы регулярные вырожения выучил бы... Ну хотя бы ознакомился.



Добавлено через 1 минуту

Не по теме:

accept, а так да, можно и так)

1
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.09.2013, 22:44
вообще, если там формат данных меняется, то нужно использовать re
если не меняется, то нужно использовать строковые методы
re считается медленным
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 12:52  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
Python
1
2
3
>>> 
>>> print('{}{}'.format(s[20], s[49:-10]))
>>>
Спасибо большое, а вы можете объяснить данную команду, что она выполняет?
И можно ли ее записать в цикле примерно в таком виде?
Python
1
2
3
for t in soup.findAll(name = 'div' , attrs = {'class': 't_0'}):
    s = t
    print('{}{}'.format(s[20], s[49:-10]))
Просто если так ее записывать выдает следующую ошибку :
Python
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:/Python32/good_suup", line 20, in <module>
    print('{}{}'.format(s[20], s[49:-10]))
  File "C:\Python32\lib\site-packages\bs4\element.py", line 905, in __getitem__
    return self.attrs[key]
KeyError: 20
Добавлено через 27 минут
Цитата Сообщение от accept Посмотреть сообщение
Python
1
print('{}{}'.format(s[20], s[49:-10]))
Я так понял, что {} {}, это в какой последовательности выводить, а .format(s[20],s[49:-10]) s[20] - это номер позиции знака +, а s[49] - номер позиции 21, не могу понять, что означает s[49:-10], и почему он у меня выкидывает ошибку когда я место s подставляю t и делаю это в цикле..

Добавлено через 12 минут
Все, я разобрался Просто надо было в цикле, t перевести в значение str
Спасибо всем огромное)))

Добавлено через 29 минут
Ребят, а подскажите пожалуйста как из такой краказябры :
Python
1
url = "http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D0%B5,_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%B0%D0%B9"
сделать нормальный url адрес, как в браузере, в оригинале он выглядет так http://rp5.ru/Погода_в_Краснод... рский_край
И можно ли как нибудь в цикле сделать так что бы http://rp5.ru/ - оставалось неизменно, а вот это Погода_в_Краснодаре,_Краснодарский_край, менялось, то есть что бы это примерно выглядело так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
url = "http://rp5.ru/"
proxy=req.ProxyHandler({'http':r'http://@10.5.45.250:3128'})
auth = req.HTTPBasicAuthHandler()
opener = req.build_opener(proxy, auth, req.HTTPHandler)
req.install_opener(opener)
f = open('html.txt' , 'r')
for line in f:
  line = data # где data это и есть наша краказябра
  conn = req.urlopen(url,line)
  soup = BeautifulSoup(conn.read(),from_encoding="utf-8")
  test = soup.findAll(name = 'div' , attrs = {'class': 't_0'})
  for t in soup.findAll(name = 'div' , attrs = {'class': 't_0'}):
    s = str(t)
    print('{}{}'.format(s[20], s[49:-10])) # (а вот этот print надо что бы записывал значение в файл, желательно в csv, но тут я еще пока не придумал как сделать:()
Это вообще реально сделать?

Добавлено через 2 часа 58 минут
Блин. Сейчас пытался выгрузить время, HTML тэги такие
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<td class="title underlineRow">
<td class="d underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
</tr>
В цикле так написал :
Python
1
2
3
4
test = soup.findAll(name = 'td' , attrs = {'class': 'd underlineRow'})
print (soup.original_encoding)
for t in soup.findAll(name = 'td' , attrs = {'class': 'd2 underlineRow'}):
   print (t)
а он мне выдал следующее

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
200
utf-8
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="d2 underlineRow">
<div class="pr_0"><img alt="" onmouseout="hideInfo( this , 'hint' )" onmouseover="tooltip( this , 'дождь (0.5 мм воды / 6 часов)' , 'hint' )" src="/img/o1d1_left.png" width="18"/></div>
<div class="pr_1" style="display: none;"><img alt="" onmouseout="hideInfo( this , 'hint' )" onmouseover="tooltip( this , 'дождь (0.02 дюйма воды / 6 часов)' , 'hint' )" src="/img/o1d1_left.png" width="18"/></div>
</td>
<td class="d2 underlineRow">
<div class="pr_0"><img alt="" onmouseout="hideInfo( this , 'hint' )" onmouseover="tooltip( this , 'без осадков' , 'hint' )" src="/img/0.png" width="18"/></div>
<div class="pr_1" style="display: none;"><img alt="" onmouseout="hideInfo( this , 'hint' )" onmouseover="tooltip( this , 'без осадков' , 'hint' )" src="/img/0.png" width="18"/></div>
И много много такого, что я не правильно сделал? Мне необходимо только время...
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 13:24
Цитата Сообщение от Lamerok1 Посмотреть сообщение
не могу понять, что означает s[49:-10]
это срез: начиная с символа с индексом 49 до десятого символа с конца

Цитата Сообщение от Lamerok1 Посмотреть сообщение
подскажите пожалуйста как из такой краказябры :
Цитата Сообщение от Lamerok1 Посмотреть сообщение
сделать нормальный url адрес, как в браузере
Python
1
2
3
4
>>> import urllib.parse
>>> urllib.parse.unquote('http://rp5.ru/%D0%9F%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0_%D0%B2_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D0%B5,_%D0%9A%D1%80%D0%B0%D1%81%D0%BD%D0%BE%D0%B4%D0%B0%D1%80%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D1%80%D0%B0%D0%B9')
'http://rp5.ru/Погода_в_Краснодаре,_Краснодарский_край'
>>>
Цитата Сообщение от Lamerok1 Посмотреть сообщение
И можно ли как нибудь в цикле сделать так что бы http://rp5.ru/ - оставалось неизменно
Python
1
2
3
4
5
>>> 'http://rp5.ru/{}'.format('Красноярск')
'http://rp5.ru/Красноярск'
>>> 'http://rp5.ru/{}'.format('Краснодар')
'http://rp5.ru/Краснодар'
>>>
1
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 16:05  [ТС]
Спасибо большое.
подскажите пожалуйста с помощью чего из этого куска
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<td class="d underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
<td class="d2 underlineRow" colspan="2">10:00</td>
<td class="d2 underlineRow" colspan="2">16:00</td>
<td class="n2 underlineRow" colspan="2">22:00</td>
<td class="n underlineRow" colspan="2">04:00</td>
Я могу выбрать время.
Я пробовал так :
Python
1
for t in soup.findAll(name = 'td', attrs={'class' : 'd2 underlineRow')
он мне выдает то что и должен, то есть все <td у которых class = d2 underlineRow, но как сделать так, что бы он выдовал все классы не могу понять
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
05.09.2013, 17:47
accept, вот видите, по сути таже задача, а уже ступор...
1
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 17:52  [ТС]
Цитата Сообщение от Wolkodav Посмотреть сообщение
вот видите, по сути таже задача, а уже ступор...
Согласен с вами полностью, просто мне как человеку далёкому от программирования немножко тяжело быстро с этим разбираться, но я стараюсь. А то чего не понимаю спрашиваю у более компетентных людей.
Тут проблема в том что class разный, я бы мог их все по очереди вывести, но надо именно так, как они расположены, как это сделать понять не могу.
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 18:19
Цитата Сообщение от Wolkodav Посмотреть сообщение
accept, вот видите, по сути таже задача, а уже ступор...
сейчас наладится

Python
1
2
3
4
>>> s = '<td class="d underlineRow" colspan="2">16:00</td>'
>>> s[-10:-5]
'16:00'
>>>
Добавлено через 1 минуту
Цитата Сообщение от Lamerok1 Посмотреть сообщение
а он мне выдал следующее
colspan при выборе тоже укызывай
1
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 18:30  [ТС]
Спасибо большое, это понятно
Не понятно, как сделать так что бы он выводил их все на экран. Я имею ввиду следующие.
Python
1
2
for t in soup.findAll(name = 'td' , attrs = {'class': 'd2 underlineRow'}):
    print(t)
при таком коде он мне будет выводить все время у которого тэг class = d2 underlineRow
А как мне сделать так, что бы он выводил и тэги у которых class = n2 underlineRow, class = d underlineRow, class= n underlineRow.
Причем выводил их так, как они располагаются...
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 18:35
написал про colspan, добавь его в attrs

Добавлено через 3 минуты
а насчёт n2, d2 - скорее всего, придётся по-другому искать
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 18:37  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
написал про colspan, добавь его в attrs

Добавлено через 3 минуты
а насчёт n2, d2 - скорее всего, придётся по-другому искать
А каким образом (инструментом)?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 18:46
возможно, тем же самым
попробуй d2 убрать, оставив только underlineRow
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 18:47  [ТС]
Нет, так он вообще ничего не выводит А прям в этой записи нельзя регулярное выражение применить?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 18:50
Цитата Сообщение от Lamerok1 Посмотреть сообщение
Нет, так он вообще ничего не выводит
значит, оно сравнивает строки, а не анализирует классы

Цитата Сообщение от Lamerok1 Посмотреть сообщение
А прям в этой записи нельзя регулярное выражение применить?
регулярное выражение в словаре он тоже будет рассматривать как строку

найди описание .findAll()
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 18:53  [ТС]
Вот что пишут про этот метод:

Метод обхода дерева findAll начинает с заданной точки и ищет все объекты Tag и NavigableString, соответствующие заданным критериям. Сигнатура метода findall следующая:
findAll(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)'''
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 19:05
python.su. BeautifulSoup

Можно передать вызываемый объект, который принимает объект Tag как единственный аргумент и возвращает логическое значение. Каждый объект Tag, который находит findAll, будет передан в этот объект и если его вызов возвращает True, то необходимый тег найден.
Python
1
soup.findAll(lambda tag: len(tag.name) == 1 and not tag.attrs)
Добавлено через 3 минуты
кстати, словарь может принимать регулярные выражения

Цитата Сообщение от Lamerok1 Посмотреть сообщение
Python
1
for t in soup.findAll(name = 'td' , attrs = {'class': 'd2 underlineRow'}):
Python
1
for t in soup.findAll(name = 'td' , attrs = {'class': re.compile(r'[dn]2? underlineRow')}):
0
0 / 0 / 0
Регистрация: 31.07.2013
Сообщений: 47
05.09.2013, 19:05  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
Мне сейчас очень стыдно и не ловко, но что значит
Python
1
lambda tag: len(tag.name) == 1 and not tag.attrs
?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
05.09.2013, 19:07
это пока не нужно, регулярные выражения можно передавать в словарь
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2013, 19:07

При передаче post запроса через прокси сервер в ответ приходят ошибки с прокси сервера
При передаче post запроса через прокси сервер в ответ прилетают ошибки с прокси сервера: &lt;p&gt;&lt;b&gt;Invalid Request&lt;/b&gt;...

Как работать через прокси-сервер?
Есть программа (IRC-клиент). Какие команды нужно посылать прокси (HTTP) чтоб установить соединение с IRC сервером и передавать/получать...

Как скрыть свой ip, через прокси сервер?
Я новичок, подскажите плз как скрыть свой ip, через прокси сервер (только по проще объясните и подробнее). Заранее спасибо!

Как настроить прокси сервер через терминал?
через терминала /etc/apt/apt.conf следующую запись Acquire::http :: proxy &quot;логин:пароль@ip_адрес:порт/&quot;; Acquire::https...

Как отправить e-mail через прокси-сервер?
Как отправить e-mail через прокси-сервер? Спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru