Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 17, 2014 14:37:39

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

сграбить index.php

помогите пожалуйста разобраться с ошибкой

следующим скриптом успешно загружаю из сети файл index.html и успешно записываю его в текстовый файл(сам скрипт находится на жёстком диске):

import requests
addr = requests.get('http://fh79272k.bget.ru/py_test/index.html')
#addr = requests.get('http://prozaik.16mb.com/works/weekend_projects/site_himmler_homepage/index.php')
print(addr.status_code)
print(addr.text)
try:
    f2 = open("text2.txt", 'w')
except Exception:
    print('open error')
except:
    print('error')
else:
    try:
        f2.write(addr.text)
    except Exception:
        print('write error')
    except:
        print('error')
    else:
        print('write OK')
finally:    
    f2.close()

следующим скриптом успешно загружаю из сети файл index.html и НЕуспешно записываю его в текстовый файл:
import requests
#addr = requests.get('http://fh79272k.bget.ru/py_test/index.html')
addr = requests.get('http://prozaik.16mb.com/works/weekend_projects/site_himmler_homepage/index.php')
print(addr.status_code)
print(addr.text)
try:
    f2 = open("text2.txt", 'w')
except Exception:
    print('open error')
except:
    print('error')
else:
    try:
        f2.write(addr.text)
    except Exception:
        print('write error')
    except:
        print('error')
    else:
        print('write OK')
finally:    
    f2.close()

сообщение об ошибке такое:
write error

непонятно почему не получается записать html-разметку при помощи второго скрипта. на экран она выводится в обоих случаях




Отредактировано zlodiak (Фев. 17, 2014 14:38:26)

Офлайн

#2 Фев. 17, 2014 19:14:53

alexsis
Зарегистрирован: 2013-07-26
Сообщения: 148
Репутация: +  9  -
Профиль   Отправить e-mail  

сграбить index.php

попробуйте записывать так:

f2.write(addr.text.encode('utf-8'))

Отредактировано alexsis (Фев. 17, 2014 19:15:22)

Офлайн

#3 Фев. 17, 2014 19:34:02

PanovSergey
От: Екатеринбург
Зарегистрирован: 2013-12-29
Сообщения: 269
Репутация: +  19  -
Профиль   Адрес электронной почты  

сграбить index.php

Вы сами себе злобный буратино
уберите эту хрень

except Exception:
        print('write error')
    except:
        print('error')
и увидите какой реально exception упал

Офлайн

#4 Фев. 17, 2014 19:38:50

zlodiak
От: Россия
Зарегистрирован: 2014-01-19
Сообщения: 159
Репутация: +  0  -
Профиль   Адрес электронной почты  

сграбить index.php

PanovSergey
Вы сами себе злобный буратино уберите эту хрень

убрал. при следующем коде
import requests
#addr = requests.get('http://fh79272k.bget.ru/py_test/index.html')
addr = requests.get('http://prozaik.16mb.com/works/weekend_projects/site_himmler_homepage/index.php')
print(addr.status_code)
print(addr.text)
try:
    f2 = open("text2.txt", 'w')
except Exception:
    print('open error')
except:
    print('error')
else:
    f2.write(addr.text)
finally:    
    f2.close()

сообщение об ошибке такое:
Traceback (most recent call last):
File “C:\VINT\OPENSERVER\OpenServer\domains\localhost\python\parse_html\1\dombook.py”, line 16, in <module>
f2.write(addr.text)
File “C:\Python33\lib\encodings\cp1251.py”, line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)
UnicodeEncodeError: ‘charmap’ codec can't encode characters in position 87-91: character maps to <undefined>

Офлайн

#5 Фев. 18, 2014 02:42:12

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

сграбить index.php

Подозреваю, что requests не смог определить кодировку страницы и выставил ISO-8859-1
Попробуйте изменить функцию get_encoding_from_headers в файле requests.utils, закоментируйте две последние строки функции.
Но правильнее все же писать в файл байты:

with open("text.html", "wb") as f2:
    f2.write(addr.content)
Поскольку Вы просто сохраняете страницу, то перед записью в файл совсем не обязательно загружать ее полностью:
import shutil
import requests
addr = requests.get('http://prozaik.16mb.com/works/weekend_projects/site_himmler_homepage/index.php', stream=True)
with open("text.html", "wb") as f2:
    shutil.copyfileobj(addr.raw, f2)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version