2013-06-21 4 views
3

Ну, мне нужно разобрать html-формы, начиная с «ввода», мне нужно извлечь те, у которых есть тип «текст» и любой, который не является текстом.Parsing html формы тег ввода с красивым супом

У меня есть этот код:

from BeautifulSoup import BeautifulSoup as beatsop 

html_data = open("forms.html") 

def html_parser(html_data) 
    html_proc = beatsop(html_data) 
    #We extract the text inputs. 
    txtinput = html_proc.findAll('input', {'type':'text'}) 
    #We extract the any kind of input that is not text. 
    listform = ["radio", "checkbox", "password", "file", "image", "hidden"] 
    otrimput = html_proc.findAll('input', {'type':listform}) 

html_parser(html_data) 

я использую его с локальными документами, но вы можете использовать URLLIB запросить любую веб-страницу с формами. Теперь, проблема, мне нужно извлечь тег «значение» нетекстовых форм ввода и тег «name» текстовых. Кто-нибудь знает, как я могу это сделать?

Спасибо!

ответ

3

Для доступа к атрибуту элемента используйте element['attribute'].

from BeautifulSoup import BeautifulSoup as beatsop 


def html_parser(html_data): 
    html_proc = beatsop(html_data) 
    #We extract the text inputs. 
    txtinput = html_proc.findAll('input', {'type':'text'}) 
    listform = ["radio", "checkbox", "password", "file", "image", "hidden"] 
    otrimput = html_proc.findAll('input', {'type': listform}) 

    print('Text input names:') 
    for elem in txtinput: 
     print(elem['name']) 

    print('Non-text input values:') 
    for elem in otrimput: 
     value = elem.get('value') 
     if value: 
      print(value) 
     else 
      print('{} has no value'.format(elem)) 

with open("forms.html") as html_data: 
    html_parser(html_data) 
+0

Вы бог? это работало как шарм. Но я получаю эту ошибку: Traceback (последний последний вызов): Файл «beatusup.py», строка 21, в html_parser (html_data) Файл «beatusup.py», строка 18, в html_parser print (elem ['value']) Файл «/usr/local/lib/python2.7/dist-packages/BeautifulSoup.py», строка 613, в getitem return self._getAttrMap() [key] KeyError: 'значение' –

+0

вы можете помочь мне с этой ошибкой ? или это с моей машиной? –

+0

@ Asp1r3-At0m, я обновил код. – falsetru