2008-11-13 2 views
5

Дано HTML ссылка какHTML Разложение связать текст и целевой

<a href="urltxt" class="someclass" close="true">texttxt</a> 

как можно изолировать URL и текст?

Обновления

Я использую Beautiful Soup, и я не в состоянии понять, как сделать это.

Я сделал

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url)) 

links = soup.findAll('a') 

for link in links: 
    print "link content:", link.content," and attr:",link.attrs 

я получить

*link content: None and attr: [(u'href', u'_redirectGeneric.asp?genericURL=/root /support.asp')]* ... 
... 

Почему я недостающее содержание?

редактировать: подробно остановился на 'застрял', как советовал :)

+0

Есть вероятность, что с urllib.urlopen (url) возникнет проблема. Попробуйте распечатать это и посмотреть, что вы получаете. Это должен быть прямой HTML веб-страницы. – 2008-11-13 00:48:46

+0

Кроме того, «застрял!» не очень описательна. Показать больше кода и что именно происходит неправильно. – 2008-11-13 01:05:04

+0

Спасибо за дополнительную информацию, это значительно облегчило увидеть, что происходит. – 2008-11-13 02:31:42

ответ

8

Использование Beautiful Soup. Само по себе это сложнее, чем кажется, вам будет лучше использовать проверенный и проверенный модуль.

EDIT:

Я думаю, что вы хотите:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url).read()) 

Кстати, это плохая идея, чтобы попытаться открытия URL там, как будто это пойдет не так, он может получить уродливые.

EDIT 2:

Это должно показать вам все ссылки на странице:

import urlparse, urllib 
from BeautifulSoup import BeautifulSoup 

url = "http://www.example.com/index.html" 
source = urllib.urlopen(url).read() 

soup = BeautifulSoup(source) 

for item in soup.fetchall('a'): 
    try: 
     link = urlparse.urlparse(item['href'].lower()) 
    except: 
     # Not a valid link 
     pass 
    else: 
     print link 
+0

Я согласен, Beatiful Soup, вероятно, лучший способ справиться с этим. – monkut 2008-11-13 00:44:28

6

Вот пример кода, показывающий получение атрибутов и содержание ссылок:

soup = BeautifulSoup.BeautifulSoup(urllib.urlopen(url)) 
for link in soup.findAll('a'): 
    print link.attrs, link.contents 
3

Хотя я полагаю, что остальные могут быть правильными, указывая на использование Beautiful Суп, они могут быть нет, а использование внешней библиотеки может быть массово поверх вас для ваших целей. Вот регулярное выражение, которое будет делать то, что вы просите.

/<a\s+[^>]*?href="([^"]*)".*?>(.*?)<\/a>/ 

Вот что он соответствует:

'<a href="url" close="true">text</a>' 
// Parts: "url", "text" 

'<a href="url" close="true">text<span>something</span></a>' 
// Parts: "url", "text<span>something</span>" 

Если вы хотите получить только текст (например: «textsomething» во втором примере выше), я бы просто запустить другой регулярное выражение над он должен лишить что-либо между заостренными кронштейнами.

4

Похоже, у вас есть две проблемы: там

  1. link.content s, не link.content
  2. AttrS является словарь, а не строка. Он содержит пары ключевых значений для каждого атрибута в элементе HTML. ссылка.attrs ['href'] предоставит вам то, что вы ищете, но вы хотите обернуть это в чеке, если вы столкнетесь с тегом без атрибута href.
Смежные вопросы