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]