Действительно ли возможно поднять трубку более устойчивый синтаксический анализатор HTML к Python, механизируют?

Генерация хорошего хеша легче сказать чем сделать. Помните, Вы в основном представляете n байты данных с m битами информации. Чем больше Ваш набор данных и меньший m, тем более вероятно Вы получите коллизию... две части данных, решающих к тому же хешу.

самым простым хешем, который я когда-либо изучал, был просто XORing все байты вместе. Это легко, быстрее, чем большинство сложных хеш-алгоритмов и промежуточный достойный хеш-алгоритм общего назначения для небольших наборов данных. Это - Пузырьковая сортировка хеш-алгоритмов действительно. Так как простая реализация оставила бы Вас с 8 битами, это - только 256 хешей... не настолько горячих. Вы могли блоки XOR вместо individal байтов, но тогда алгоритм становится намного более сложным.

Поэтому, конечно, криптографические алгоритмы, возможно, делают некоторый материал, в котором Вы не нуждаетесь..., но они - также огромный шаг в качестве хеша общего назначения. Хеш MD5, который Вы используете, имеет 128 битов с миллиардами и миллиардами возможных хешей. Единственным путем Вы, вероятно, доберетесь, что-то лучше должно взять некоторые репрезентативные пробы данных, которые Вы ожидаете проходить свое приложение и пробовать различные алгоритмы на нем для наблюдения, сколько коллизий Вы добираетесь.

Поэтому, пока я не вижу некоторых оснований для не использования консервированного хеш-алгоритма (производительность, возможно?), я оказываюсь перед необходимостью рекомендовать придерживаться с тем, что Вы имеете.

9
задан int3 23 November 2009 в 10:58
поделиться

2 ответа

чтение из большого примера на первой странице веб-сайта Mechanize :

# Sometimes it's useful to process bad headers or bad HTML:
response = br.response()  # this is a copy of response
headers = response.info()  # currently, this is a mimetools.Message
headers["Content-type"] = "text/html; charset=utf-8"
response.set_data(response.get_data().replace("<!---", "<!--"))
br.set_response(response)

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

3
ответ дан 4 December 2019 в 14:28
поделиться

То, что вы ищете, можно сделать с помощью lxml.etree , который представляет собой эмулятор xml.etree.ElementTree (и замену), предоставленный lxml :

Сначала мы берем неверный неверно сформированный HTML:

% cat bad.html
<html>
<HEAD>
    <TITLE>this HTML is awful</title>
</head>
<body>
    <h1>THIS IS H1</H1>
    <A HREF=MYLINK.HTML>This is a link and it is awful</a>
    <img src=yay.gif>
</body>
</html>

(обратите внимание на смешанный регистр между открывающими и закрывающими тегами, отсутствием кавычек).

А затем проанализируем его:

>>> from lxml import etree
>>> bad = file('bad.html').read()
>>> html = etree.HTML(bad)
>>> print etree.tostring(html)
<html><head><title>this HTML is awful</title></head><body>
    <h1>THIS IS H1</h1>
    <a href="MYLINK.HTML">This is a link and it is awful</a>
    <img src="yay.gif"/></body></html>

Обратите внимание, что теги и цитата были исправлены для нас.

Если у вас раньше были проблемы с синтаксическим анализом HTML, возможно, это ответ, который вы ищете. Что касается деталей HTTP, это совсем другое дело.

1
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: