Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Регулярные выражения для обхода сайта при парсинге


(Oleg Reutov) #1

Добрый вечер. Подскажите, как с помощью регулярки разлечить ссылки вида “категория” и “статья” ?
Задача стоит в том , что надо написать 2 РВ для сайта , где есть ссылки вида “категория” и “статья” и что бы они не попадали под одно правило одновременно.
Например :
http://site.com/news/ - категория
http://site.com/digests/2.html - категория
http://site.com/sports/hockey/10.html - категория
http://site.com/sports/hockey/nhl-novyi-standart-shaib810.html - статья
http://site.com/politics/yanukovich-became-a-citizen-of-China837.html - статья
http://site.com/brief/it9.html - статья

Пробовал делать через .html ( для статей ) и цифры+/ для категорий , но все равно не то что-то.
Можете не писать РВ , просто подскажите как можно разлечить либо за что цепляться при решение данной задачи.
Делается на питоне.

Спасибо.


(Taras) #2

загнать в URL обьект и парсить части етого обьекта , можно регулярки писать … но долго будет что б все кейси покрить


(Максим Таран) #3

А в чёс разница в урлах? То, что категория содержит только цифры?


(ex3me0) #4

На приведенных примерах - работать будет любой из вариантов:

import re

urls = """http://site.com/news/
http://site.com/digests/2.html
http://site.com/sports/hockey/10.html
http://site.com/sports/hockey/nhl-novyi-standart-shaib810.html
http://site.com/politics/yanukovich-became-a-citizen-of-China837.html
http://site.com/brief/it9.html"""

# 1
for url in urls.splitlines():
    last_chunk_wo_html = url.rsplit('/', 1)[1].rsplit('.', 1)[0]
    if re.search(r'\d*[a-zA-Z][a-zA-Z\d]*', last_chunk_wo_html):
        print url, 'article'
    else:
        print url, 'category'

# 2
for url in urls.splitlines():
    last_chunk_wo_html = url.rsplit('/', 1)[1].rsplit('.', 1)[0]
    if not last_chunk_wo_html or last_chunk_wo_html.isdigit():
        print url, 'category'
    else:
        print url, 'article'