2014-02-21 3 views
0

У меня есть html-файл, содержащий тонны относительных ссылок href like;Python Regex для извлечения относительных ссылок href

href="data/self/dated/station1_140208.txt">Saturday, February 08, 2014/a>br/> 

Есть множество другого HTTP и фтп ссылки в файле,
мне нужен выходной файл текстового;

14/02/08: station1_140208.txt 
14/02/09: station1_140209.txt 
14/02/10: station1_140210.txt 
14/02/11: station1_140211.txt 
14/02/12: station1_140212.txt 

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

Мне нужна ваша помощь на стороне регулярного выражения. Спасибо.

+0

Используйте DOM для извлечения всех ссылок и после проверки ссылок, которые являются относительными. –

ответ

0
pattern = 'href="data/self/dated/([^"]*)"[^>]*>([\s\S]*?)</a>' 

тест:

import re 
s = """ 
<a href="data/self/dated/station1_140208.txt">Saturday, February 08, 2014</a> 
br/> 
<a href="data/self/dated/station1_1402010.txt">Saturday, February 10, 2014</a> 
br/> 
<a href="data/self/dated/station1_1402012.txt">Saturday, February 12, 2014</a> 
br/> 
""" 
pattern = 'href="data/self/dated/([^"]*)"[^>]*>([\s\S]*?)</a>' 
re.findall(pattern,s) 

выход:

[('station1_140208.txt', 'Saturday, February 08, 2014'), ('station1_1402010.txt', 'Saturday, February 10, 2014'), ('station1_1402012.txt', 'Saturday, February 12, 2014')] 
+0

Большое спасибо Ковальски, он делает именно то, что я искал. – user3335418

2

Я знаю, что это не совсем то, что вы просили, но я думал, что показать способ преобразования даты из Вашей ссылки текст в формат, который вы показываете в своем примере желаемого выхода (дд/мм/гг). Я использовал BeautifulSoup для чтения элементов из html.

from bs4 import BeautifulSoup 
import datetime as dt 
import re 

html = '<a href="data/self/dated/station1_140208.txt">Saturday, February 08, 2014</a><br/>' 

p = re.compile(r'.*/station1_\d+\.txt') 

soup = BeautifulSoup(html) 

a_tags = soup.find_all('a', {"href": p}) 

>>> print a_tags # would be a list of all a tags in the html with relevant href attribute 
[<a href="data/self/dated/station1_140208.txt">Saturday, February 08, 2014</a>] 

names = [str(a.get('href')).split('/')[-1] for a in a_tags] #str because they will be in unicode 

dates = [dt.datetime.strptime(str(a.text), '%A, %B %m, %Y') for a in a_tags] 

имена и даты использования list comprehensions

strptime создает даты-времени предметов в строках даты

>>> print names # would be a list of all file names from hrefs 
['station1_140208.txt'] 

>>> print dates # would be a list of all dates as datetime objects 
[datetime.datetime(2014, 8, 1, 0, 0)] 

toFileData = ["{0}: {1}".format(dt.datetime.strftime(d, '%w/%m/%y'), n) for d in dates for n in names] 

strftime форматирует дату в формате в вашем примере:

>>> print toFileData 
['5/08/14: station1_140208.txt'] 

затем напишите en пытаюсь в toFileData в файл

Для получения информации о методах, которые я использовал такие как soup.find_all() и a.get() в коде выше, я рекомендую вам посмотреть на BeautifulSoup документов по ссылке вверху. Надеюсь это поможет.

Смежные вопросы