URL-адрес Python регулярное выражение - PullRequest
0 голосов
/ 06 августа 2010

У меня есть регулярное выражение, и я хочу добавить вывод регулярного выражения в мой URL

для примера

url = 'blabla.com'
r = re.findall(r'<p>(.*?</a>))

r output - /any_string/on/any/server/

, но я не знаю, как сделать запрос get с выводом регулярного выражения

blabla.com/any_string/on/any/server/

Ответы [ 2 ]

2 голосов
/ 06 августа 2010

Не используйте регулярные выражения для анализа HTML. Используйте настоящий парсер.

Я предлагаю использовать парсер lxml.html. lxml поддерживает xpath , который является очень мощным способом запроса структурированных документов. Есть готовый к использованию метод make_links_absolute(), который делает то, что вы просите. Это также очень быстро.

Например, на странице этого вопроса исходный код HTML (тот, который вы сейчас читаете) содержит следующую часть:

<li><a id="nav-tags" href="/tags">Tags</a></li>

Выражение xpath //a[@id='nav-tags']/@href означает: «Получите мне атрибут href всех тегов <a> с атрибутом id, равным nav-tags» . Давайте использовать это:

from lxml import html

url = '/2726421/url-adres-python-regulyarnoe-vyrazhenie'

doc = html.parse(url).getroot()
doc.make_links_absolute()
links = doc.xpath("//a[@id='nav-tags']/@href")
print links

Результат:

['http://stackoverflow.com/tags']
0 голосов
/ 06 августа 2010

Просто получи красивый суп:

http://www.crummy.com/software/BeautifulSoup/documentation.html#Parsing+a+Document

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen(url)
soup = BeautifulSoup(page)
soup.findAll('p')
...