Как проверить наличие определенной ссылки при парсинге HTML страницы?

Как улучшить формулу парсера screaming frog для проверки наличия ссылки по списку URL-ов? При использовании текущей формулы <[aA]\s[^>]*\b[hH][rR][eE][fF]\s*=\s*["'](http[^"']*voximplant\.com[^"']*) получаю неправильные результаты, хотя ссылки на voximplant.com в документе нет. Что не так с формулой или что я упускаю из виду?
  • 21 января 2024 г. 22:08
Ответы на вопрос 1
Судя по вашей формуле, вы используете регулярное выражение для поиска ссылок на `voximplant.com`. Однако, в регулярном выражении есть некоторые недочеты, которые могли бы объяснить, почему вы получаете неправильные результаты даже когда ссылок `voximplant.com` на странице нет.

Давайте шаг за шагом разберем ваше регулярное выражение:

```
<[aA]\s[^>]*\b[hH][rR][eE][fF]\s*=\s*["'](http[^"']*voximplant\.com[^"']*)
```

- `<[aA]\s` - ищет тег начинающийся с `<a` или `<A` за которым следует пробельный символ.
- `[^>]*` - ищет любые символы, кроме `>`, и повторяет их сколько угодно раз.
- `\b[hH][rR][eE][fF]\s*=\s*` - ищет слово, начинающееся с `href` или `HREF` (или любое другое сочетание заглавных и строчных букв) с возможными пробелами до и после `=`.
- `["'](http[^"']*voximplant\.com[^"']*)` - ищет начало URL с `http`, за которым следует текст `voximplant.com` и любые символы до следующей кавычки.

Ошибка может заключаться в использовании `\b` перед `href`. Это не всегда работает корректно, так как `\b` обозначает границу слова, и оно может не распознаваться перед символами, которые нем являются строго алфавитно-цифровыми, например перед `=`.

Чтобы улучшить ваше регулярное выражение, вы можете использовать следующий вариант:

```
<[aA][^>]*href=["']?http[^"'>]*voximplant\.com[^"'>]*["']?
```

Выражение расшифровывается следующим образом:

- `<[aA][^>]*` - ищет тег `<a` или `<A` с любыми следующими за ним символами кроме `>`.
- `href=` - ищет атрибут `href=` сразу за предыдущей частью.
- `["']?` - делает кавычки необязательными (одинарные или двойные).
- `http[^"'>]*` - начинает поиск URL с `http`, исключая дальнейшие одинарные или двойные кавычки, а также знак `>`.
- `voximplant\.com` - пытается найти текст `voximplant.com` в ссылке.
- `[^"'>]*` - продолжает захват любых символов за исключением кавычек и знака `>`.
- `["']?` - заканчивает поиск, сделав окончание кавычек также необязательным.

Однако, имейте в виду, что регулярные выражения не идеально подходят для разбора HTML документов из-за их сложной и вложенной природы. Лучше использовать специализированные библиотеки для парсинга HTML, такие как Beautiful Soup в Python или jsoup в Java, которые более устойчивые к ошибкам в HTML и предоставляют более гибкий и надежный механизм для извлечения данных из HTML.
Похожие вопросы