#regex #python-3.x
#регулярное выражение #python-3.x
Вопрос:
Я пытаюсь извлечь все домены из текстового файла и сохранить его в другой текстовый файл, но он отображает все доменные имена и другие вещи, а также возвращает:
ads.css
abc.js
Kashi.png
Мои входные строки:
token$script,domain=liveresult.ru
euroiphone.eu##.div-download-h
||ausujet.com/skins/common/ads.js
@@||cyberdean.fr/js/advertisement.js
biggestplayer.me##.adblock *
hearthhead.com,wowhead.com##.block-bg
wowhead.com##.block-bgimg
euroiphone.eu##.div-download-h
euroiphone.eu##.div-download-v
findretros.com##.fuck-adblock
@@||ausujet.com/skins/common/ads.js
@@||cyberdean.fr/js/advertisement.js
@@||dbz-fantasy.com/ads.css
@@||dev-dyod.fr/styles/ads.css
forums.ru###mdl_adb
ostroh.info###modal.modal-bg
7days2die.info###nafikblock
all-episodes.net###odin
Существует множество правил, из которых я должен извлечь домен
Мой результат должен быть:
liveresult.ru
cyberdean.fr
euroiphone.eu
ausujet.com
biggestplayer.me
hearthhead.com
wowhead.com
euroiphone.eu
ausujet.com
cyberdean.fr
dbz-fantasy.com
dev-dyod.frforums.ru
7days2die.infoy
Я пробовал:
import re
Domains = ['ru', 'fr' ,'eu', 'com']
with open('easylist.txt', 'r') as f:
a=f.read()
result=re.findall(r'[a-zA-Z0-9-] .[a-zA-Z0-9-.] ',a)
unique_result = list(set(result))
for r in result:
domain_name = r.split('.')[1]
If domain_name in domains:
file_out.write(r /n)
Но для этого мне нужно составить список доменов, который является трудоемким процессом, я хочу создать некоторый шаблон, который автоматически извлекает домен, игнорируя такие вещи, как ads.js , ads.css , advertisement.js и т.д. , так что , пожалуйста , скажите мне , где я поступаю неправильно.
Комментарии:
1. Решение для этого с вашей стороны будет высоко оценено.
Ответ №1:
Если вы хотите напечатать все в новой строке, вам следует file_out.write(r 'n')
записать каждую строку в новой строке, и вы можете удалить дубликаты, используя set
import re
domains = ['ru', 'fr' ,'eu', 'com']
with open('easylist.txt', 'r') as f:
a=f.read()
result=re.findall(r'[a-zA-Z0-9-] .[a-zA-Z0-9-.] ',a)
unique_result = list(set(result))
for r in result:
#Extract domain name out of url
domain_name = r.split('.')[1]
#Check if domain name is in list of domains, only then add it
if domain_name in domains:
file_out.write(r)
Комментарии:
1. а как насчет удаления дублирования?
2. Обновил мой ответ!
3. Отлично, пожалуйста, поддержите и примите мой ответ, чтобы помочь мне 🙂
4. В приведенном выше коде еще одна проблема, с которой я сталкиваюсь, заключается в том, что он также извлекает неверный вывод, как и возвращает ads.js , abc.php , kashi.png но я не хочу извлекать эти вещи, я хочу, чтобы мой код пропускал вещи после / обратной косой черты, он должен включать только доменное имя, какой шаблон я должен использовать?
5. Для этого вы можете проверить, присутствуют ли в строке известные доменные имена, например
com
,in
,gov
и т. Д.