Beautifulsoup根据nextSibling标签名称获取文本

j

我正在抓取多个具有相似格式的页面,但是它在这里和那里都有一些变化,并且没有可用于搜索我所需要的类的类。

格式如下:

<div id="mainContent">

    <p>Some Text I don't want</p>
    <p>Some Text I don't want</p>
    <p>Some Text I don't want</p>
    <span> More text I don't want</span>
    <ul>...unordered-list items..</ul>

    <p>Text I WANT</p>
    <ol>...ordered-list items..</ol>

    <p>Text I WANT</p>
    <ol>...ordered-list items..</ol>

</div>

有序/无序列表和其他标签的数量根据页面而变化,但是保持不变的是,我始终希望<p>标签中的文本是该标签的前一个同级<ol>标签。

我正在尝试(但不起作用)的是:

main = soup.find("div", {"id":"mainContent"})

for d in main.children:
    if d.name == 'p' and d.nextSibling.name == 'ol':
        print(d.text)
    else:
        print("fail")

此输出fail适用于每次迭代。在试图弄清楚为什么它不起作用时,我尝试了:

for d in main.children:
    if d.name == 'p':
        print(d.nextSibling.name)
    else:
        print("fail")

这样的输出是这样的:

fail
None
fail
None
fail
None
fail
fail
fail
fail
fail
None
fail

等等...

为什么这不像我想的那样起作用?当下一个标记是时,如何才能从<p>元素中获取文本<ol>

Salmanwahed

您只需要p标签之前的ol标签。首先找到ol标签,然后找到先前的Tag对象(在本例中为p标签)。现在,你的代码是不工作,因为,那里是之间的换行符Tag被元素NavigableString类型的对象。并为d.nextSibling您提供那些换行符。因此,您必须在此处检查对象的类型。

from bs4 import Tag
# create soup
# find the ols
ols = soup.find_all('ol')
for ol in ols:
     prev = ol.previous_sibling
     while(not isinstance(prev, Tag)):
         prev = prev.previous_sibling
     print(prev.text)

这将为您提供所需的文本。

Text I WANT
Text I WANT

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用BeautifulSoup获取标签名称

来自分类Dev

如何在BeautifulSoup中查找给定文本的标签名称

来自分类Dev

Scala XML根据标签名称获取值

来自分类Dev

从XML获取标签名称

来自分类Dev

从wordpress获取标签名称

来自分类Dev

如何在Python中使用标签名称在特定标签内获取文本

来自分类Dev

在python的BeautifulSoup中获取NextSibling

来自分类Dev

beautifulsoup在标签之间获取文本

来自分类Dev

如何从Button获取标签名称?

来自分类Dev

通过标签名称获取元素

来自分类Dev

获取xml文件的标签名称

来自分类Dev

获取WooCommerce产品属性标签名称

来自分类Dev

获取标签名称Selenium python

来自分类Dev

获取OpenERP中字段的标签名称

来自分类Dev

SQLAlchemy从列中获取标签名称

来自分类Dev

通过标签名称获取xml元素

来自分类Dev

通过标签名称获取php数据

来自分类Dev

BeautifulSoup:按标签名称解析子级

来自分类Dev

获取具有“名称”属性的XML元素的标签名称

来自分类Dev

Polymer:如何根据属性替换标签名称?

来自分类Dev

使用jquery和textarea根据属性更改标签名称

来自分类Dev

如何从BeautifulSoup中的span标签获取文本

来自分类Dev

使用BeautifulSoup获取没有标签的文本

来自分类Dev

使用beautifulsoup从br标签获取文本

来自分类Dev

使用BeautifulSoup获取没有标签的文本?

来自分类Dev

根据多个标签文本查找父标签-BeautifulSoup

来自分类Dev

RegExp获取属性,但不获取标签名称

来自分类Dev

Python HTML解析,获取标签名称及其值

来自分类Dev

在QuerySet值列表中获取ChoiceField的完整标签名称