2017-07-31 8 views
0

で複数の要素でタグ検索:私はこのようなタグを見つけるだろうどのようにBS4

<us-applicant sequence="001" app-type="applicant" designation="us-only"> 

のみを持つものたち-申請シーケンス=「001」(そうではない私たち-申請シーケンス= "002を見つけるを")BS4を使って?私よりのように見えるタグを見つけることに慣れています:私はこれを取ると何かを探しています

<applicant>APPLICANTNAME</applicant> 

を:

<us-applicant sequence="001" app-type="applicant" designation="us-only"> 
    <some sub-tag>Data1</some sub-tag> 
<us-applicant sequence="001" app-type="applicant" designation="us-only"> 
    <some sub-tag>Data2</some sub-tag> 
<us-applicant sequence="002" app-type="applicant" designation="us-only"> 
    <some sub-tag>Data3</some sub-tag> 

と私はvars = soup.findall(SOMETHING) for var in vars: data = vars.find_all('some sub-tag') return(data.text)

を書くだけのData1を返しますとData2、Data3ではなく

答えて

0

タグでは空白を使用できません。したがって、空白をハイフンに置き換えて<some sub-tag>というタグを変更しました。

soup.findAllは、タグ 'us-applicant'と 'sequence' '002'でHTML内の要素のリストを検索します。このリストの0番目の要素を選択するのは1つだけなので、次に、この要素にタグsome-sub-tagを持つ要素を求めます。最後に、その要素のtextプロパティを表示します。

>>> HTML = ''' 
... <us-applicant sequence="001" app-type="applicant" designation="us-only"> 
... <some-sub-tag>Data1</some-sub-tag> 
... <us-applicant sequence="001" app-type="applicant" designation="us-only"> 
...  <some-sub-tag>Data1</some-sub-tag> 
...  <us-applicant sequence="002" app-type="applicant" designation="us-only"> 
...   <some-sub-tag>Data1</some-sub-tag> 
...   ''' 
>>> import bs4 
>>> soup = bs4.BeautifulSoup(HTML, 'lxml') 
>>> one_applicant = soup.findAll('us-applicant', attrs={'sequence': '002'})[0] 
>>> one_applicant 
<us-applicant app-type="applicant" designation="us-only" sequence="002"> 
<some-sub-tag>Data1</some-sub-tag> 
</us-applicant> 
>>> sub_tag = one_applicant.find('some-sub-tag') 
>>> sub_tag 
<some-sub-tag>Data1</some-sub-tag> 
>>> sub_tag.text 
'Data1' 
+0

Data1、Data2、Data3に自分の "Data"を編集するのを忘れました。上記のように質問を編集してもこの回答は成立しますか? –

+0

はい。検索のテキストを特に言及しない限り、要素に含まれるテキストではなく要素の構造*です。それを試してみるべきです。それが機能する場合は、回答を受け入れたことをマークする必要があります。 –

関連する問題