Найти - Пользователи
Полная версия: Парсинг html регулярными выражениями
Начало » Web » Парсинг html регулярными выражениями
1
Newbie
Файл 1:
import urllib     

hdl = urllib.urlopen("file://localhost/D:/page.htm")
html = hdl.read()
hdl.close()

text_file = open("file.txt", "w")
text_file.write(html)
text_file.close()
Файл 2:
import re

text_file = open("file.txt", "r")
contents = text_file.read()
text_file.close()

p = re.compile('(?<=starting_html_tag).*(?=ending_html_tag)')
m = p.search(contents)
if m:
print 'Match found: ', m.group()
else:
print 'No match'
Первым скриптом открываем веб-страницу и записываем все содержимое страницы в файл file.txt. Вторым скриптом открываем файл file.txt и ищем содержимое между тегами starting_html_tag и ending_html_tag, которые (!) там имееются и они уникальны.

Проблема: No match! Почему не хочет искать инфу между указанными тегами? Хах… Я сказал не хочет, потому что вот какая штука:

только что созданный файл file.txt выглядит так:
<div id="gDheader-wrap">
<div id="gDheader">
<div id="gDlogo">
<h1><a href="http://... и так далее...
стоит мне его как-либо пересохранить (уже вручную - через файл > сохранить как), так он во-первых в размере теряет пару кб, а во-вторых содержание его становится следущего вида:
<div id="gDheader-wrap"><div id="gDheader">    <div id="gDlogo">      <h1><a href="http://... и тому подобное...
Так вот: скрипт №2 прекрасно работает с “пересохраненным” файлом. Я полагаю, возможно, вся загвозка в кодировке? Или нет?
На PHP у меня имеется подобный скрипт; так я там полученную веб-страницу сперва кодирую, прежде чем использовать рексы:
$contents = file_get_contents("http://somewebsite.com");

$contents = urlencode($contents);

$pattern = '/(?<=starting_html_tag).*(?=ending_html_tag)/';

preg_match($pattern, $contents, $matches);
Подскажите, пожалуйста, как решить проблему…
qman
привет,
ты свои вопросы решил? или забросил?
Deyteriy
К re.compile нужно вторым аргументов поставить MULTILINE, тогда, думаю, всё заработает
o7412369815963
можно попробовать флаг DOTALL
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB