1 / 1 / 0
Регистрация: 04.03.2013
Сообщений: 22

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

04.03.2013, 18:46. Показов 6038. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru