【问题标题】:Finding a Tag With Multiple Elements in BS4在 BS4 中查找具有多个元素的标签
【发布时间】:2017-07-31 22:41:10
【问题描述】:

我如何找到这样的标签:

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

并且只找到那些使用 BS4 的 us-applicant sequence="001"(所以不是 us-applicant sequence="002")?我熟悉查找看起来更像的标签:

<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

【问题讨论】:

    标签: python python-3.x beautifulsoup tags bs4


    【解决方案1】:

    标签中不允许有空格;因此,我更改了 &lt;some sub-tag&gt; 之类的标签,将空格替换为连字符。

    soup.findAll 查找 HTML 中带有标签“us-applicant”和“sequence”“002”的元素列表。由于只有一个,我们选择此列表的第 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'
    

    【讨论】:

    • 我忘记将我的“数据”编辑为 Data1、Data2、Data3。如果按上述方式编辑问题,这个答案是否仍然成立?
    • 是的。元素的结构 与其包含的文本无关,除非您在搜索中特别提及文本。你应该试试看。如果它有效,那么您应该将答案标记为已接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多