регулярное выражение Python с разбором HTML-страницы - PullRequest
1 голос
/ 06 сентября 2010

Добрый день. Маленькая проблема с регулярным выражением.

У меня есть регулярное выражение, похожее на

rexp2 = re.findall(r'<p>(.*?)</p>', data)

И мне нужно захватить все в

<div id="header">
<h1></h1>
<p>
localhost OpenWrt Backfire<br />
Load: 0.00 0.00 0.00<br />
Hostname: localhost
</p>
</div>

Но мой код не работает :( Что я делаю не так?

Ответы [ 4 ]

4 голосов
/ 06 сентября 2010

Предусмотренное законом предупреждение : Плохая идея анализировать (X) HTML с помощью регулярного выражения.

К счастью, есть лучший способ. Для начала, сначала установите модуль BeautifulSoup. Далее прочтите документацию . В-третьих, код!

Вот один из способов сделать то, что вы пытаетесь сделать:

from BeautifulSoup import BeautifulSoup
html = """<div id="header">
<h1></h1>
<p>
localhost OpenWrt Backfire<br />
Load: 0.00 0.00 0.00<br />
Hostname: localhost
</p>
</div>"""
soup = BeautifulSoup(html)
for each in soup.findAll(name = 'p'):
    print each
1 голос
/ 06 сентября 2010

Я бы не рекомендовал использовать регулярные выражения таким образом.Попробуйте вместо этого разобрать HTML с Beautiful Soup и пройтись по дереву DOM.

0 голосов
/ 06 сентября 2010

Вам необходимо указать флаг re.M (многострочный) для соответствия многострочным строкам.Но анализ HTML с помощью регулярных выражений не особенно хорошая идея.

Похоже, вам нужна статистика от маршрутизатора на базе OpenWrt.Почему бы вам не написать простой CGI-скрипт, который выводит необходимую информацию в машиночитаемом формате ?

0 голосов
/ 06 сентября 2010

точка не соответствует вводу, используйте re.DOTALL

re.findall(r'<p>(.*?)</p>', data, re.DOTALL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...