Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
1 / 1 / 0
Регистрация: 16.08.2013
Сообщений: 18

Ошибка кодировки при парсере веб страницы, содержащей кирилицу

27.08.2015, 01:58. Показов 1790. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.

Пишу свой первый парсер.

Проблема в том, что часть адреса страницы содержит кириллицу.

Я пробовал кодировать и туда, и сюда. но получается ошибка UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-31: ordinal not in range(128)

Отображается в консоли нормально - http://hh.ru/search/vacancy?te... ue&salary=

Пробовал так же через urllib.parse.urlencode(), но что-то не выходит
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
query='инженер'
salary_condition=0 # salary not less
vacancy_description=r'' # which words should be mentioned 
 
base_url='http://hh.ru/search/vacancy?text='+query+'&only_with_salary=false&area=1&enable_snippets=true&clusters=true&salary='
print(base_url)
 
base_url=str(base_url)
 
print(base_url)
def get_html(url):  
    response=urllib.request.urlopen(url)
    return response.read()
 
def parse(html):
    soup=BeautifulSoup(urlopen(html), "html.parser")
    table=soup.find('table', class_='l l_auto')
    print(table.prettify())
 
def main():
    print(parse(base_url))
    
if __name__=='__main__':
    main()
Что мне нужно сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.08.2015, 01:58
Ответы с готовыми решениями:

Почему при создании веб-страницы в FrontPage автоматически создается папка с изображениями, а при создании веб-страницы в DreamWeaver - нет?
Если я создаю веб-страницу в FrontPage и называю ее, например, page.html, то автоматически создается папка page.files, где хранятся все...

Из строки, содержащей полный адрес веб-страницы, выделить доменное имя сайта
Текст задания: Из строки содержащей полный адрес веб-страницы ( например, http://www.khai.edu/ru/site/facultet.html ), выделить доменное...

Ошибка при парсере (The specified path, file name, or both are too long.)
Всем добрый вечер. Помогите пожалуйста. Нужно спарсить рисунок $cimg = curl_init (); curl_setopt ($cimg, CURLOPT_URL,...

6
 Аватар для kariber
0 / 0 / 0
Регистрация: 27.08.2015
Сообщений: 5
27.08.2015, 03:28
Как вариант проблема в переменной query:
Python
1
base_url='http://hh.ru/search/vacancy?text='+query+'&only_with_salary=false&area=1&enable_snippets=true&clusters=true&salary='
https://docs.python.org/3.3/li... rl-quoting

Использовать именно BeautifulSoup критично? Также возможно баг именно в нем.
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
27.08.2015, 04:42
Лучший ответ Сообщение было отмечено pashamt8 как решение

Решение

use requests в место urllib
1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
27.08.2015, 10:44
pashamt8, выложи полный traceback ошибки.
0
1 / 1 / 0
Регистрация: 16.08.2013
Сообщений: 18
27.08.2015, 14:10  [ТС]
*
Проблему решил.

Вместо urllib использую requests. Спасибо всем!
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
27.08.2015, 15:44
Лучший ответ Сообщение было отмечено pashamt8 как решение

Решение

Цитата Сообщение от pashamt8 Посмотреть сообщение
Вместо urllib использую requests. Спасибо всем!
Ну requests бесспорно крутая библиотека, но по сути это просто надстройка на urllib и другими библиотеками. Переход на более простую библиотеку это побег от реальной проблемы, вызванной не знанием основ. Так делать не правильно.

Суть твоей проблемы, что url не может содержать не ascii символы, по этому твой запрос нужно было закодировать специальной кодировкой и тогда ошибки ушли бы)
Python
1
2
3
4
5
6
7
8
9
10
11
12
import urllib.parse
import urllib.request
 
query = 'инженер'
 
url = ('http://hh.ru/search/vacancy?text={}&'
       'only_with_salary=false&area=1&enable_snippets=true&'
       'clusters=true&salary='.format(urllib.parse.quote(query)))
 
response = urllib.request.urlopen(url)
 
print(response.read().decode('utf8'))
2
1 / 1 / 0
Регистрация: 16.08.2013
Сообщений: 18
27.08.2015, 16:29  [ТС]
Да, ты прав.

Буду знать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.08.2015, 16:29
Помогаю со студенческими работами здесь

Ошибка сертификата при открытии в браузере веб-страницы по протоколу HTTPS
Всем привет! Такая проблема выскакивает только на 2х компьютерах И на разных сайтах Компьютер первый не открывает только кинопоиск,...

Программа загружает и обрабатывает веб-страницы с веб-сервера статистики, при этом жутко тормозит
Всем привет! В программе начались жуткие тормоза. Программа загружает и обрабатывает веб-страницы с веб-сервера статистики. Debug...

Не открываются страницы, содержащие кирилицу
Есть сайт, к примеру example.ru и на нём есть страница, которая должна открываться по адресу example.ru/наши-клиенты. Но вместо страницы...

Ошибка в соединении веб страницы с локальной БД
Здравствуйте! Есть задание: при вводе данных на форме необходимо в качестве ответа поучить данные из БД на OpenServer Я создала БД,...

ошибка в парсере
Здравствуйте уважаемые php гуру ! Уже 2 месяца пытаюсь понять что не так в парсере .... Парсер не парсит контент но ссылки не парсит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru