Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 9, 2013 08:31:46

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Добрый день.
Написал скрипт который вынружает архив погоды с сайта rp5.ru

[code python]import urllib.request as req
import urllib
import re
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)
a = input('введите начальную дату(большую)')
a.encode('latin1')
a.format(1)
b = input ('введите месяц бОльший')
b.encode('latin1')
b.format(1)
c = input ('введите год бОльшьй')
c.encode('latin1')
c.format(1)
a1 = input('введите дату меньшую')
a1.encode('latin1')
a1.format(1)
b1 = input ('введите месяц меньший')
b1.encode('latin1')
b1.format(1)
c1 = input('введите год меньший')
c1.encode('latin')
c1.format(1)
url = 'http://rp5.ru/inc/f_archive.php'
script_data=b'wmo_id=34927&f_ed0=a&f_ed1=b&f_ed2=c&f_ed3=1&f_ed4=0&f_ed5=0&f_ed6=a1&f_ed7=b1&f_ed8=c1&f_pe=1&f_pe1=1&lng_id=2'
with urllib.request.urlopen(url, data=script_data) as data:
arch = re.findall(r'<a href=([^<]*?)>',
data.read().decode('latin1'))[0]
with urllib.request.urlopen(arch) as archdata, \
open('armavir11.gz', 'wb') as fout:
fout.write(archdata.read())
[/code]

Но он почему то не работает

Выдает следующие :
[code python]Traceback (most recent call last):
File "C:/Python32/dddd", line 31, in <module>
with urllib.request.urlopen(arch) as archdata, \
File "C:\Python32\lib\urllib\request.py", line 138, in urlopen
return opener.open(url, data, timeout)
File "C:\Python32\lib\urllib\request.py", line 351, in open
req = Request(fullurl, data)
File "C:\Python32\lib\urllib\request.py", line 194, in __init__
self._parse()
File "C:\Python32\lib\urllib\request.py", line 199, in _parse
raise ValueError("unknown url type: %s" % self.full_url)
ValueError: unknown url type: ../objects/files.from.archive/34/34927.01.01.1970.01.01.1970.1.0.0.ru.ansi.00000000.csv.gz[/code]
Помогите понять почему.
Спасибо.

Офлайн

#2 Сен. 9, 2013 09:20:46

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Пожалуйста поясните.

Потому что вы запрашиваете относительный URL “../objects/files.from.archive/34/3…”. В начале приведите URl к абсолютному виду "http://domain.com/path…", а затем уже запрашивайте его.

Офлайн

#3 Сен. 9, 2013 09:26:10

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Спасибо, а каким образом это можно сделать.
Этот код работает, если мы просто числами вставлем даты, то он выгружает. А если вводим с клавиатуры, то не работает

Офлайн

#4 Сен. 9, 2013 09:29:58

lorien
От:
Зарегистрирован: 2006-08-20
Сообщения: 755
Репутация: +  37  -
Профиль  

Пожалуйста поясните.

> Спасибо, а каким образом это можно сделать.

Найдите место в вашем коде, где “это” происходит и исправьте “это”.

Офлайн

#5 Сен. 9, 2013 09:46:02

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Я правильно понял, что необходимо добавить в
with urllib.request.urlopen(arch) as archdata
каким то образом http/ ?

Офлайн

#6 Сен. 9, 2013 09:55:06

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Исправил код

[code python]with urllib.request.urlopen(arch) as archdata,open('armavir11.gz', 'wb') as fout:[/code]

Если подставить числа все отлично работает, как только начинаю вводить с клавиатуры, то выгружает совсем не за те даты.
выгружает почему то с 01.01.1970 по 01.01.1970

Почему так понять не могу.

Офлайн

#7 Сен. 9, 2013 10:33:46

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Я понял почему он мне ставит эти даты, потому что переменную script_data он видит в следующем виде:

b'wmo_id=34927&f_ed0=a&f_ed1=b&f_ed2=c&f_ed3=1&f_ed4=0&f_ed5=0&f_ed6=a1&f_ed7=b1&f_ed8=c1&f_pe=1&f_pe1=1&lng_id=2'
Как сделать так, что бы он понимал что a,b,c,a1,b1,c1 - это переменные?

Офлайн

#8 Сен. 9, 2013 11:35:24

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Stepe
форматированием через format

print 'a={}, b={}'.format(a,b)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Сен. 9, 2013 11:46:59

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Спасибо, но либо я что то не так сделал, либо это не верное решение.

a = input('введите начальную дату(большую)')
b = input ('введите месяц бОльший')
c = input ('введите год бОльшьй')
a1 = input('введите дату меньшую')
b1 = input ('введите месяц меньший')
c1 = input('введите год меньший')
url = 'http://rp5.ru/inc/f_archive.php'
script_data=b'wmo_id=34927&f_ed0={}&f_ed1={}&f_ed2={}&f_ed3=1&f_ed4=0&f_ed5=0&f_ed6=a1&f_ed7={}&f_ed8={}&f_pe=1&f_pe1=1&lng_id=2'.format(a,b,c,a1,b1,c1)

Выдает следующую ошибку.

Traceback (most recent call last):
File “CPython32/d”, line 24, in <module>
script_data=b'wmo_id=34927&f_ed0={}&f_ed1={}&f_ed2={}&f_ed3=1&f_ed4=0&f_ed5=0&f_ed6=a1&f_ed7={}&f_ed8={}&f_pe=1&f_pe1=1&lng_id=2'.format(a,b,c,a1,b1,c1)
AttributeError: ‘bytes’ object has no attribute ‘format’

Офлайн

#10 Сен. 9, 2013 12:02:10

Stepe
Зарегистрирован: 2013-09-03
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Пожалуйста поясните.

Все спасибо разобрался

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version