Извлечение текста из строки в Python - PullRequest
0 голосов
/ 07 марта 2020

Допустим, у меня есть несколько строк URL в столбце данных pandas, например ...

https://www.tahoedailytribune.com/south-shore/ ...

И я ищу, чтобы захватить имя между www. и .com. Однако иногда www. не появляется в URL / строке, и я не вижу прямого способа извлечь это. Я использовал длину, например [-8:], но иногда у меня будет www. бороться, а иногда я не буду.

Заранее спасибо.

1 Ответ

0 голосов
/ 07 марта 2020

Для этого может потребоваться пара шагов и некоторые знания в регулярном выражении.
1: Используйте модуль urllib для извлечения атрибута netloc (сетевого расположения) URL-адреса.
Для https://www.tahoedailytribune.com/south-shore/ это www.taheodailytribune.com.

from urllib.parse import urlparse

# urlparse splits the url into separate components:
# parse_object: ParseResult(scheme='https', netloc='www.tahoedailytribune.com', path='/south-shore/', params='', query='', fragment='')
parse_object = urlparse("https://www.tahoedailytribune.com/south-shore/")

# Get the network location
network_loc = getattr(parse_object, "netloc")

2: теперь используйте регулярное выражение для захвата всего между www и .com
Это regex не обслуживает сайты, использующие суффиксы с указанием страны c, т.е. .co.uk, .com.au et c

import re

# Pre compiled regex
# ?: means to not capture the group
# Regex permalink: https://regex101.com/r/yxrsr8/1
pattern = re.compile("^(?:www\.)?(\S+)(?:\.com)$")

# regex object if match else None
re_obj = re.match(pattern, network_loc)

if re_obj is not None:
  # site_name: tahoedailytribune
  site_name = re_obj.group(1)
else:
  print("Could not get site name")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...