У меня есть программа, которая очищает страницу, анализирует ее на наличие ссылок, затем загружает страницы, на которые есть ссылки (звучит как поисковый робот, но это не так) и сохраняет каждую в отдельном файле. Имя файла, используемого для сохранения, является частью URL-адреса страницы. Так, например, если я найду ссылку на www.foobar.com/foo, я загружу страницу и сохраню ее в файле с именем foo.xml.
Позже мне нужно просмотреть все такие файлы и повторно загрузить их, используя имя файла в качестве последней части URL-адреса. (Все страницы взяты с одного сайта.)
Это работает хорошо, пока я не сталкиваюсь с нелатинским символом в URL-адресе. На сайте используется utf-8, поэтому, когда я загружаю исходную страницу и расшифровываю ее, все работает нормально. Но когда я пытаюсь использовать декодированный URL-адрес для загрузки соответствующей страницы, это не работает, потому что я предполагаю, что кодировка неверна. Я пытался использовать .encode() для имени файла, чтобы изменить его обратно, но это ничего не меняет.
Я знаю, что это должно быть очень просто и является результатом моего непонимания проблем с кодированием, но я долго ломал над этим голову. Я несколько раз читал введение Джоэла Спольски в кодирование, но до сих пор не могу понять, что здесь делать. Может кто-нибудь помочь мне?
Большое спасибо, бсг
Вот код. Я не получаю никаких ошибок; но когда я пытаюсь загрузить страницу, используя имя страницы как часть URL-адреса, мне говорят, что этой страницы не существует. Конечно нет - нет такой страницы как abc/x54.
Чтобы уточнить: я загружаю html страницы, которая содержит ссылку, например, на www.foobar.com/Mehmet Kenan Dalbaşar, но она отображается как Mehmet_Kenan_Dalba%C5%9Far. Когда я пытаюсь загрузить страницу www.foobar.com/Mehmet_Kenan_Dalba%C5%9Far, страница пуста. Как сохранить www.foobar.com/Mehmet Kenan Dalbaşar и вернуть его на сайт при необходимости?
try:
params = urllib.urlencode({'title': 'Foo', 'action': 'submit'})
req = urllib2.Request(url='foobar.com',data=params, headers=headers)
f = urllib2.urlopen(req)
encoding = f.headers.getparam('charset')
temp = f.read() .decode(encoding)
#lots of code to parse out the links
for line in links:
try:
pagename = line
pagename = pagename.replace('\n', '')
print pagename
newpagename = pagename.replace(':', '_')
newpagename = newpagename.replace('/', '_')
final = os.path.join(fullpath, newpagename)
print final
final = final.encode('utf-8')
print final
##only download the page if it hasn't already been downloaded
if not os.path.exists(final + ".xml"):
print "doesn't exist"
save = open(final + ".xml", 'w')
save.write(f.read())
save.close()
repr()
обоих? - person Blender   schedule 20.12.2012urllib.unquote()
. - person Armin Rigo   schedule 20.12.2012'%C5'
и вам нужен фактический символ\xC5
, вызовитеurllib.unquote()
. - person Armin Rigo   schedule 22.12.2012