Python 仅从特定标记中的嵌套标记中删除特定标记而不包含详细信息

Python 仅从特定标记中的嵌套标记中删除特定标记而不包含详细信息,python,selenium,web-scraping,Python,Selenium,Web Scraping,我有一个页面,其中的结构类似 <body> <article> <!--article no 1--> <h3> <h2> <h1> <a> <!--first 'a' tag--> <article> <!--article no 2-->

我有一个页面,其中的结构类似

<body>
    <article>  <!--article no 1-->
        <h3>
        <h2>
            <h1>
                <a>  <!--first 'a' tag-->

        <article> <!--article no 2-->
            <h1>
            <h2>
                <a>  <!--second 'a' tag-->
        </article>       
    </article>
</body>
第一篇文章 现在i.find_元素将返回此文章标记内的所有“a”标记,其中还将包括嵌套在当前文章标记内的“article tag”内的“a”标记,但我不希望这样


我想如果我在第2篇文章或任何嵌套文章中调用第1篇文章中的find_元素'a'标记,则不应使用
beautifulsou
解析
文章
元素,并轻松获取所有锚定标记

from bs4 import BeautifulSoup
articles = browser.find_elements_by_tag_name("article")
links = []
for i in articles:
    soup = BeautifulSoup(i.get_attribute('outerHTML'), 'html5lib')
    a_tags = soup.findAll('a')
    links.extend(a_tags)

希望这有帮助!干杯

如果希望链接来自非嵌套文章,请尝试:

articles = browser.find_elements_by_tag_name('article'):
for article in articles:
    print(article.find_elements_by_xpath('./*[not(descendant-or-self::article)]/descendant-or-self::a'))
使用BeautifulSoup

尝试在
下查找所有
,如('article a')

然后使用beautifulsoup的find_parents()方法

如果('article a').find_parents('article')的长度大于2,则可能是这样嵌套的

<article>
  ..
 <article>
    ..
    <a>

您的意思是不想从嵌套(父项)中提取任何内容吗
标记?是的,我不想要任何嵌套文章的详细信息。你能用
标记的父标记更新HTML吗?我没有得到你?我们想要的标记的父标记/节点,即
会很有用。如果我有一个article object article=articles[0],它会像article一样工作吗(祖先::article)=1]'),它是否只会在这个文章标记中返回“a”标记,而不会从这个标记中嵌套的任何其他文章标记中返回。通过这种方式
article。通过xpath('.//a[count(祖先::article)=1]')
yep,这对父文章有效,但是如果我有一个嵌套文章的实例,即article=articles[1],该怎么办如果项目[1]项目嵌套在项目[0]中,并且我不希望从项目[1]中嵌套的任何其他项目标记中获得详细信息,那么它也应该适用于嵌套项目。但是,首先,您应该跳过该嵌套项目,将其作为
articles=browser。通过\u xpath(“//article[not(祖先::article)]查找元素
我不明白你的意思。事实上,我想要所有文章标签的详细信息,不管它是否嵌套。但问题是,对于一篇特定的文章,我不想要该特定文章中任何其他嵌套文章的详细信息。我的问题不要求嵌套文章中有标签。糟糕!谢谢你通知我的错误!
<article>
  ..
 <article>
    ..
    <a>
all_a = soup.findAll('article a')

direct_a = [i for i in all_a if len(i)>2]