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

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

27.08.2015, 01:58. Показов 1766. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru