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

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

02.09.2013, 17:21. Показов 190545. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru