我正在抓取类似于以下内容的html数据:
<div class="target-content">
<p id="random1">
"the content of the p"
</p>
<p id="random2">
"the content of the p"
</p>
<p>
<q class="semi-predictable">
"q tag content that I don't want
</q>
</p>
<p id="random3">
"the content of the p"
</p>
</div>
我的目标是获取所有<p>
代码及其内容,同时能够排除<q>
代码及其内容。目前,我使用以下方法获取所有<p>
标记:
contentlist = soup.find('div', class_='target-content').find_all('p')
我的问题是,在找到所有<p>
代码的结果集后,如何过滤掉包含{{<p>
的单个<q>
及其内容1}}?
注意:从soup.find('div', class_='target-content')find_all('p')
获取结果集后,我按以下方式迭代地将结果集中的每个<p>
添加到列表中:
content = ''
for p in contentlist:
content += str(p)
答案 0 :(得分:3)
您可以跳过内置bar()
标记的p
代码:
q
其中for p in soup.select('div.target-content > p'):
if p.q: # if q is present - skip
continue
print(p)
是p.q
的快捷方式。 p.find("q")
是一个CSS selector,它会匹配div.target-content > p
个p
元素的直接子元素与div
类的所有target-content
个标记。
答案 1 :(得分:2)
您可以使用filter
来完成此任务:
filter(lambda e: e.find('q') == None, soup.find('div', class_='target-content').find_all('p'))