Анализ списка URL с шаблонами регулярных выражений - PullRequest
0 голосов
/ 23 января 2019

У меня большой текстовый файл URL (> 1 миллиона URL).URL-адреса представляют страницы продукта в нескольких разных доменах.

Я пытаюсь проанализировать SKU и название продукта по каждому URL-адресу, например:

  • www.amazon.com /totes-Mens-Mike-Duck-Boot / dp / B01HQR3ODE /
    • totes-Mens-Mike-Duck-Boot
    • B01HQR3ODE
  • www.bestbuy.com/site/apple-airpods-white/5577872.p?skuId=5577872
    • яблочно-воздушные штучки белого цвета
    • 5577872

У меня уже есть отдельные шаблоны регулярных выражений для анализа двух компонентов URL (название продукта и SKU) для всех доменов в моем списке.Это почти 100 различных шаблонов.

Хотя я разобрался с тем, как тестировать этот URL-адрес / шаблон за раз, у меня возникают проблемы с выяснением того, как создать скрипт, который будет читать весь мой список., затем пройдите и проанализируйте каждую строку на основе соответствующего шаблона регулярных выражений.Любые предложения, как лучше всего решить эту проблему?

Если мой ввод - один столбец (URL), то мой желаемый вывод - 4 столбца (URL, домен, product_name, SKU).

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Поскольку извлечь имя домена из URL довольно просто, вы можете сопоставить имя домена с шаблоном для этого домена.

Примерно так:

dict = {
'domain1.com': 'regex_pattern_for_domain1', 
'domain2.com': 'regex_pattern_for_domain2'
}

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

def extract_data(url, regex_pattern):
    # code to extract product name and SKU
    return ['product_id', 'sku'] 

def extract_domain(url):
    # apply general regex pattern to extract URL
    return 'domain name'

parsed_data = []
with open('urls.txt') as f:
    url = f.readline()
    domain = extract_domain(url) # call function that extracts domain from the URL
    domain_regex = dict[domain] # use dictionary to get the regex for the given domain
    data = extract_data(url, domain_regex) # call function to extract data from the given URL and regex for that domain
    data.append(domain)
    data.append(url)
    parsed_data.append(data) # append extracted data to the list, or save it to another file if it is too big to fit into memory.
0 голосов
/ 23 января 2019

Хотя все это можно свернуть в одно массивное регулярное выражение, это может быть не самым простым подходом. Вместо этого я бы использовал двухпроходную стратегию. Укажите имена доменов в шаблоне регулярных выражений, который работает для этого домена. На первом этапе определите домен для строки, используя одно регулярное выражение, которое работает для всех URL-адресов. Затем используйте обнаруженный домен, чтобы найти соответствующее регулярное выражение в вашем dict, чтобы извлечь поля для этого домена.

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