Форум сайта python.su
Добрый день.
Написал скрипт который вынружает архив погоды с сайта 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]
Офлайн
Потому что вы запрашиваете относительный URL “../objects/files.from.archive/34/3…”. В начале приведите URl к абсолютному виду "http://domain.com/path…", а затем уже запрашивайте его.
Офлайн
Спасибо, а каким образом это можно сделать.
Этот код работает, если мы просто числами вставлем даты, то он выгружает. А если вводим с клавиатуры, то не работает
Офлайн
> Спасибо, а каким образом это можно сделать.
Найдите место в вашем коде, где “это” происходит и исправьте “это”.
Офлайн
Я правильно понял, что необходимо добавить в
with urllib.request.urlopen(arch) as archdata
каким то образом http/ ?
Офлайн
Исправил код
[code python]with urllib.request.urlopen(arch) as archdata,open('armavir11.gz', 'wb') as fout:[/code]
Офлайн
Я понял почему он мне ставит эти даты, потому что переменную 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'
Офлайн
Stepe
форматированием через format
print 'a={}, b={}'.format(a,b)
Офлайн
Спасибо, но либо я что то не так сделал, либо это не верное решение.
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)
Офлайн
Все спасибо разобрался
Офлайн