2016-11-20 21 views
0

私は各divに2つの入力要素(自己閉鎖タグ)を持っていますが、入力要素は1つしかありません。beautifulsoupにself closingタグを含むchildren要素を取得するには?

from bs4 import BeautifulSoup 
from bs4.element import Tag 

html_doc = '''<cfform> 

<div name="first_div"> 
    First name:<cfinput type="text" name="firstname"> 
    Last name:<cfinput type="text" name="lastname"> 
</div> 
<div name="second_div"> 
    Address:<cfinput type="text" name="address"> 
    Contact Number:<cfinput type="text" name="contact_number"> 
</div> 

</cfform>''' 

soup = BeautifulSoup(html_doc, 'xml') 
for div in soup.find_all("div"): 
    print(div.get("name")) 
    for child in div.children: 
     if isinstance(child, Tag): 
      print(" ", child.get("name")) 
+2

'cfinput'は、HTMLタグではなく、それは' /> 'で終わっていません。タグが自己閉鎖していることをBSがどのように知っていますか? 2番目の 'cfinput'タグは、最初のタグの子として解析されていますか? – cco

答えて

0

CCOが正確に正しいです:

は、ここに私のコードです。 <cfinput>タグを変更して自己閉鎖であることを示す場合、<cfinput/>のような/を追加すると、表示される出力が得られます。

CCOの提案とあなたのコード:

from bs4 import BeautifulSoup 
from bs4.element import Tag 

html_doc = '''<cfform> 

<div name="first_div"> 
    First name:<cfinput type="text" name="firstname"/> 
    Last name:<cfinput type="text" name="lastname"/> 
</div> 
<div name="second_div"> 
    Address:<cfinput type="text" name="address"/> 
    Contact Number:<cfinput type="text" name="contact_number"/> 
</div> 

</cfform>''' 

soup = BeautifulSoup(html_doc, 'xml') 
for div in soup.find_all("div"): 
    print(div.get("name")) 
    for child in div.children: 
     if isinstance(child, Tag): 
      print(" ", child.get("name")) 

出力、私は上記のを実行した後:

first_div
(」」、u'firstname ')
(' '、u'lastname')
second_div
( ''、u'address ')
(」 'u'contact_number')

関連する問題