Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 22

Регулярные выражения и кодировка htm страниц

04.03.2013, 18:46. Показов 6036. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет.
Написал скрипт который вытаскивает ссылки из вики-страницы. Проблема: регулярка неправильно работает, думаю как то связано с кодировкой страницы. Смотри код

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
25
26
27
28
29
30
31
32
33
import re
import urllib.request
opener = urllib.request.build_opener() 
opener.addheaders = [("Useragent", "Mozilla/5.0")]
 
def get_name(page):
    regexp_line = '"wgTitle":".+","wgCurRevisionId"'
    regexp_name = ':".+",' 
    line = re.search(regexp_line, page).group()
    return re.search(regexp_name,line).group()[2:-2]
 
def get_links(page):
    regexp_body = '<!-- bodycontent -->.+<!-- /bodycontent -->' 
        #Эта регулярка ничего не находит, хотя, по идее, должна.
    regexp_text = '<p>.+</p>'
    regexp_link = '<a href=".+</a>'
    regexp_name = '".+">'
    body = re.search(regexp_body,page).group() #тут он ничего не находит, и соответсвенно ошибка.
    result = [[],[]] 
    for block in re.search(regexp_text,body).group(): 
        for link in re.search(regexp_link, block).group():
            result[0].append('http://ru.wikipedia.org'+re.search('"/.+"', link).group()[1:-1])
            result[1].append(re.search(regexp_name, link).group()[1:-2])
    return result
 
link = 'http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D1%82%D0%B8%D0%BD%D1%81%D0%BA%D0%B8%D0%B9_%D1%8F%D0%B7%D1%8B%D0%BA'
with opener.open(link) as internet_page:
    page = internet_page.read().decode('utf-8')
    page_name = get_name(page)
    print('Link: '+link+'\nPage name: '+page_name+'\n')
    links = get_links(page)
    print('Links('+str(len(links[1]))+'):')
    for i in range(len(links[1])): print(links[1][i]+' : '+links[0][i])
Если попробовать вывести на экран страницу (print(page)) то вылезет ошибка:
File "C:\Python33\lib\encodings\cp866.py" , line 19, in encode return сodecs.charmap_encode(input,self.errors, encoding_map)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2014' in position
95: character maps to <undefined>

Такие пироги. Может ктонибудь знает в чем проблема?
Кстати, у страниц с кодировкой 1251 все в порядке и они выводятся на экран.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.03.2013, 18:46
Ответы с готовыми решениями:

Регулярные выражения и кодировка текста
Здравствуйте. Помогите решить проблему. Получаем заголовок страницы и передаем его в текстовое поле, а том вот такая ерунда...

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Дубли страниц htm и html
Вот такая проблема. В индексе яши, появились дубли станиц (естественно cms - джумла). Одна с расширением htm, другая такаяже, но html. ...

22
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
04.03.2013, 23:27
Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
 
import re
 
with open('page', encoding='utf-8') as fin:
    pat = r'<!-- bodycontent -->(.+?)<!-- /bodycontent -->'
    lst = re.findall(pat, fin.read(), re.S)
    #print(lst)
    print(lst[0][:100])
Code
1
2
3
4
[guest@localhost py]$ ./t.py 
 
                                <div id="mw-content-text" lang="ru" dir="ltr" class="mw-content-ltr"><table class="infobox" cel
[guest@localhost py]$
2
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
04.03.2013, 23:34
ага, из-за отсутствия флага re.S он не работал. Спасибо!.
0
1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 22
05.03.2013, 17:14  [ТС]
Всем спасибо, добавление флага re.S действительно спасло ситуацию
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2013, 17:14

Сделать оглавление для htm страниц
Прошу показать код для ссылок &quot;На предыдущую страницу&quot;, &quot;На следующую страницу&quot; для перехода по страницам распознанного в Finereader и...

Как вставить htm в javascript в обычный htm чтобы сохранить русские буквы?
Подскажите кто-нибудь!!! Как вставить htm c javascript в обычный htm чтобы сохранить русские буквы? Создали htm в Photoshop - картинки...

Регулярные выражения - вывод сообщения об ошибке при нахождении в строке выражения, начинающегося с цифры
Нужно чтобы при нахождении в строке выражения начинающегося с цифры появлялось сообщение об ошибке,например если ввести :2a,то будет...

Регулярные выражения. winForm. Проверка на правильность ввода выражения
Добрый день! Я создаю программу которая совершает проверку регулярного выражения, мы только начали его изучать. Условие задания: ...

Регулярные выражения: вставка символов в середину найденного выражения
Есть строки типа этого: &quot;В году 1783 марта месяца произошло событие, которые на долго запомнилось&quot;78. регулярное выражение...


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

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru