Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 27, 2011 13:32:52

py.webs
От:
Зарегистрирован: 2011-12-27
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг html BeautifulSoup

Собираем ссылки с словом “word” внутри url:

soup = BeautifulSoup.BeautifulSoup(html)
urls = [tag['href'] for tag in soup.findAll('a')]
f = lambda x: True if (x[:4] == "word") else False
print filter(f, urls)
Часть сайтов выдает ошибки:
1. ‘malformed start tag’
2. KeyError: ‘href’
Первая более - менеее понятна, суп считает ‘html’ невалидным. Возможно ли избежать?
Причина второй не ясна. Сылки в скармливаемом супу ‘html’ есть.

И умеет ли BeautifulSoup собирать ссылки с заданным словом в анкоре? Вроде '<a href="http://domain.com/">'*world*'</a>'

Может быть есть лучшее решение для подобных задач?



Офлайн

#2 Дек. 27, 2011 23:18:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

парсинг html BeautifulSoup

py.webs
Причина второй не ясна. Сылки в скармливаемом супу ‘html’ есть.
может там не только ссылки, но и <a name
сначала нужно делать проверку на наличие атрибута, а потом уже брать из него значение
есть модуль htmllib



Офлайн

#3 Дек. 28, 2011 19:08:12

majestic
От:
Зарегистрирован: 2010-09-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

парсинг html BeautifulSoup

Замени:

urls = [tag['href'] for tag in soup.findAll('a')]
на:
urls = [tag.get('href') for tag in soup.findAll('a') if tag.get('href') != None]



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version