2012-06-29 3 views
4

Мне нужно регулярное выражение, которое вернет мне текст, содержащийся между двойными кавычками, который начинается с указанного текстового блока, и заканчивается конкретным расширением файла (например .txt). Я использую urllib2 для получения html страницы (html довольно прост).Python найти ссылку на скачивание файла на веб-странице

В принципе, если у меня есть что-то вроде

<tr> 
    <td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td> 
    <td><a href="Client-8.txt">new_Client-8.txt</a></td> 
    <td align="right">27-Jun-2012 18:02 </td> 
</tr> 

Он должен просто вернуться ко мне

Client-8.txt 

Если возвращенное значение содержится в двойных кавычках. Я знаю, как имя файла начинается с «Client-» и расширение файла «.txt».

Я играю с r.search (regex, string), где вводимая строка является html страницы. Но я воняю регулярные выражения.

Спасибо!

+1

время связать мой любимый ответ на SO снова: http://stackoverflow.com/a/1732454/10077 –

+0

Ну, что положить конец. Теперь о чем-то совершенно другом! Благодаря! – ZacAttack

ответ

4

Вы не должны использовать регулярные выражения для этой задачи. Гораздо проще написать сценарий с BeautifulSoup для обработки HTML-кода и поиска нужного вам элемента.

В вашем случае, вы должны искать для всех <a> элементов, href атрибут начинается с Client- и заканчивается .txt. Это даст вам список всех файлов.

+0

Я избегал использования beautifulSoup, потому что хотел использовать только инструменты, включенные в базовый пакет python. Но поскольку регулярные выражения не соответствуют задаче, я думаю, мне придется укусить пулю. Благодаря! – ZacAttack

+0

Вы также можете анализировать HTML с помощью Python's HTMLParser: http://docs.python.org/library/htmlparser.html. Но код будет длиннее, чем использование BeautifulSoup (которое было сделано специально для очистки). –

+0

Вы также должны взглянуть на [lxml] (http://lxml.de/). – istruble

1
soup = BeautifulSoup('<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]"></td><td><a href="Client-8.txt">new_Client-8.txt</a></td><td align="right">27-Jun-2012 18:02 </td>') 
x=soup.findAll('a') 
for i in x: 
    if '.txt' in i['href']: 
     print(i['href']) 
Смежные вопросы