2014-02-17 2 views
0

Я использую isinstance для выбора некоторых html-тегов и передачи их функции Beautifulsoup. Проблема в том, что я продолжаю получать NameErrors из того, что должно быть прекрасно исполняемым кодом.isinstance не работает правильно с beautifulsoup (NameError)

def horse_search(tag): 
    return (tag.has_attr('href') and isinstance(tag.previous_element, span)) 

... 

for tag in soup.find_all(horse_search): 
    print (tag)  

NameError: глобальное имя «пядь» не определен

Кроме того, я получаю сообщение об ошибке из примера кода в документации BeautifulSoup использованием isinstance в сочетании с tag.previous_element

def surrounded_by_strings(tag): 
    return (isinstance(tag.next_element, NavigableString) 
      and isinstance(tag.previous_element, NavigableString)) 

for tag in soup.find_all(surrounded_by_strings): 
    print tag.name 

NameError: глобальное имя «NavigableString» не определено

Что может быть неправильным? Благодаря!

+1

Что вы пытаетесь достичь, используя эти вызовы 'isinstance'? также, покажите свой импорт –

+1

Импорт из импорта bs4 BeautifulSoup, импорт запросов, импорт повторно, время импорта и импорт случайных. Я ищу, чтобы изолировать теги, которые содержат нужную мне строку. Из всех тегов есть только несколько, которые мне нужны, и все они являются дочерними элементами тега span. – user3146384

ответ

0

найти все якоря, что имеет срок родителя и HREF атрибута сделать:

for span in soup.find_all('span'): 
    for a in span.find_all('a'): 
     if a.has_attr('href'): 
      print a['href'] 

однако, в то время как это хорошо, так как в большинстве случаев, с помощью какой-то инструмент, который поддерживает XPath может быть даже лучше, для Например, используя lxml и xpath, вы можете использовать этот код как:

from lxml import etree 
etree.parse(url, etree.HTMLParser()).xpath('//span/a/@href') 
+0

Получил это на работу, большое спасибо – user3146384

+1

К сожалению, для меня это не отвечает на вопрос («Что может быть неправильно» - то есть, почему здесь вызывается NameErrors). – dpb

Смежные вопросы