[Проблема] Парсинг больших страниц регулярным выражением

Поддержка
  • Я получаю несколько страниц через http клиент, потом нахожу в них ссылки на другие страницы по определённому регулярному выражению. В итоге на самой последней странице находятся не все ссылки, а только очень маленькая их часть (до 5 штук максимум, хотя их должно быть до 30).

    На самой последней странице мне необходимо найти ссылки только с блока, где есть слово ПЗСО.

    Вот прикрепляю свой скрипт.
    0_1501525839309_Parser_0.0.5.xml

    Я также заметил, что регулярные выражения хорошо работают на страницах размером 23 00 или 50 000 байт, но когда дело касается больших страниц - до 300 000 байт начинаются глюки.

  • Вот наглядный пример. Вот сайт - http://vstup.info/2017/i2017i217.html
    Через Get запрос получаю его код.
    И пытаюсь регуляркой получить все ссылки из блоков, где есть слово ПЗСО.

    Регулярка вот - " >ПЗСО<+.href="./(.).html">.* "

    Мне выдаёт только один ответ - "217/i2017i217p416634". Кстати, возможно это важно! Я получаю только каталог и код специально, мне оно не нужно с расширением .html в дальнейшем

    Ну а как же например - "217/i2017i217p393297.html"!?

    Вот этот тестовый проект по проще:
    0_1501527120859_BASPR1.xml

    UPD. Даже когда я пытаюсь найти все ссылки на этой странице, то их количество равно всего 3.

    Вот этот проект:
    0_1501528480390_BASPR1.xml

    В первом примере города и названия вузов получаются все без исключения, но специальности почему-то не находятся полностью

  • Без обид, но для начала неплохо бы подучить регулярки.

  • @D1MA12 У тебя регулярка >ПЗСО<+.*href="\.\/(.*)\.html">.* вконце стоит . означающие любой символ, и * означает от нуля и до последнего любого символа. То есть он находит первое совпадение и собирает весь оставшийся файл в ответ.

  • @D1MA12 Самая элементарная регулярка >ПЗСО<.*?href="\.\/(.*?)\.html"> спокойно находит 42 совпадения.
    Вот тут смотри. Вообще советую испытывать все свои регулярки на сайте https://regex101.com

  • Да, регулярки я осваивал исключительно на BASе и делал всё методом тыка. Но тогда почему

    .*href="/2017/(.*)\.html".*
    

    собирает все данные на своей странице, а

    >ПЗСО<+.*href="\.\/(.*)\.html">.*
    

    нет?

    @Fox Пока писал, вы написали ответ. Спасибо, буду изучать ваш код.

  • @D1MA12 Вот хорошая шпаргалка.
    alt text

  • @D1MA12 лучше пользоваться xpath для парсинга html, если данные хорошо организованы

  • @DrPrime Та мне с одним способом добывания данных разобраться бы. А потом можно и разные вариации учить.

    Спасибо большое всем за советы, особенно @Fox за предоставленный код и шпаргалку.

  • Проблема с IF

    Поддержка
    0 Votes
    2 Posts
    388 Views
  • 0 Votes
    7 Posts
    654 Views
  • 0 Votes
    3 Posts
    466 Views
  • 0 Votes
    2 Posts
    254 Views
  • 0 Votes
    4 Posts
    659 Views