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

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

02.09.2013, 17:21. Показов 190340. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru