2017-07-31 69 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)

只会返回数据1和数据2,没有数据3

回答

0

福岛县在标签不允许的;因此,我已经改变了标签,如<some sub-tag>,连字符替换空白。

soup.findAll发现了与标签“美申请人”和“序列“002”的HTML元素的列表。由于只有一个我们选择这个列表的第0个元素。现在我们用标签“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

我忘了编辑我的“数据”是数据1,数据2,数据3。如果问题如上所述进行编辑,这个答案是否仍然成立? –

+0

是的。它是重要的不是它们所包含的文本,除非您特别提到在搜索文本元素的*结构*。你应该试试。如果它有效,那么你应该标记接受的答案。 –