Самостоятельное изучение регулярного выражения или запроса xpath? - PullRequest
0 голосов
/ 28 мая 2009

Можно ли написать код, который генерирует регулярное выражение или XPath, который анализирует ссылки на основе какого-либо HTML-документа?

То, что я хочу, - это проанализировать страницу для некоторых ссылок. Единственное, что я знаю, это то, что большинство ссылок на странице - это ссылки.

Для простого примера, возьмите страницу результатов поисковой системы Google, например, this . Большинство ссылок из результатов поиска и выглядит примерно так:

<h3 class="r"><a onmousedown="return rwt(this,'','','res','1','AFQjCNERidL9Hb6OvGW93_Y6MRj3aTdMVA','')" class="l" href="http://stackoverflow.com/"><em>Stack Overflow</em></a></h3>

Можно ли написать код, который распознает это и распознает это и может анализировать все ссылки, даже если Google изменяет их представление?

Я думаю о разборе всех ссылок и поиске символов X до и после каждого тега, а затем работаю с этим.

Я понимаю, что это также может быть сделано с XPath, но вопрос все тот же. Могу ли я проанализировать этот контент и сгенерировать действительный XPath для поиска ссылок serp?

Ответы [ 2 ]

0 голосов
/ 28 мая 2009

Насколько я понимаю, большинство алгоритмов машинного обучения работают лучше всего, когда у них есть много примеров, из которых они обобщают «интеллектуальное» поведение. В этом случае у вас не так много примеров. Google вряд ли будет часто менять их формат. Даже если нам это часто кажется, этого, вероятно, недостаточно для алгоритма машинного обучения.

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

0 голосов
/ 28 мая 2009

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

(?<=href=")[^"]+(?=")

Проверено в Regex Hero , это регулярное выражение использует положительный взгляд назад и положительный взгляд вперед, чтобы получить URL внутри href = "".

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

(?<=<a[^<]+href=")[^"]+(?=")

Это должно работать нормально, если страница соответствует соглашению href = "" для ссылок. Если они используют события onclick, то все становится сложнее, так как вы будете иметь дело с непредсказуемостью Javascript. Даже Google не сканирует ссылки Javascript.

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...