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



  • Я получаю несколько страниц через 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 за предоставленный код и шпаргалку.


Log in to reply
 

  • 3
  • 12
  • 6
  • 4
  • 3
  • 9
  • 5