Извлечение текста из разобранного HTML с помощью Python - PullRequest
2 голосов
/ 26 августа 2010

Я новичок в Python и пытаюсь найти html с помощью регулярных выражений, которые были проанализированы с BeautifulSoup. У меня не было никакого успеха, и я думаю, что причина в том, что я не совсем понимаю, как правильно настроить регулярные выражения. Я смотрел на старые вопросы о похожих проблемах, но до сих пор не понял. Если бы кто-нибудь мог извлечь «/ torrent / 32726/0 /» и «Slackware Linux 13.0 [x86 DVD ISO]», а также подробное выражение того, как работает регулярное выражение, это было бы очень полезно.

<td class="name">
  <a href="/torrent/32726/0/">
   Slackware Linux 13.0 [x86 DVD ISO]
  </a>
 </td>

Edit: я хотел сказать, что я пытаюсь извлечь "/ torrent / 32726/0 /" и "Slackware Linux 13.0 [x86 DVD ISO]", используя функции BeautifulSoups для поиска в дереве разбора. Я пробовал разные вещи после поиска и чтения документации, но я все еще не уверен, как это сделать.

Ответы [ 2 ]

3 голосов
/ 26 августа 2010

BeautifulSoup также может извлечь значения узлов из вашего HTML.

from BeautifulSoup import BeautifulSoup

html = ('<html><head><title>Page title</title></head>'
       '<body>'
       '<table><tr>'
       '<td class="name"><a href="/torrent/32726/0/">Slackware Linux 13.0 [x86 DVD ISO]</a></td>'
       '<td class="name"><a href="/torrent/32727/0/">Slackware Linux 14.0 [x86 DVD ISO]</a></td>'
       '<td class="name"><a href="/torrent/32728/0/">Slackware Linux 15.0 [x86 DVD ISO]</a></td>'
       '</tr></table>'
       'body'
       '</html>')
soup = BeautifulSoup(html)
links = [td.find('a') for td in soup.findAll('td', { "class" : "name" })]
for link in links:
    print link.string

Вывод:

Slackware Linux 13.0 [x86 DVD ISO]  
Slackware Linux 14.0 [x86 DVD ISO]  
Slackware Linux 15.0 [x86 DVD ISO]  
2 голосов
/ 26 августа 2010

Вы можете использовать lxml.html для анализа html-документа:

from lxml import html

doc = html.parse('http://example.com')

for a in doc.cssselect('td a'):
    print a.get('href')
    print a.text_content()

Вам нужно будет посмотреть, как структурирован документ, чтобы найти наилучший способ определения ссылок, которые вы хотите (могут быть другие таблицы с ссылками в них, которые вам не нужны и т. Д.): Сначала вы можете захотеть например, найти правильный элемент table. Кроме селекторов css (например, xpath), также есть опции для поиска в документе / элементе.

Если вам нужно, вы можете превратить ссылки в абсолютные ссылки с помощью метода .make_links_absolute() (сделайте это в документе после анализа, и все URL будут абсолютными, очень удобно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...