【发布时间】:2019-10-05 09:59:00
【问题描述】:
我想要 div 类 'hide info-json' 的内容,其父 li 标签类是 'info-wrap' 或 'info-wrap no-meta' 但不是 'info-wrap hide'。
HTML 示例:
<li class="info-wrap">
<div class="hide info-json">
<p>Content That I Want - JSON Data </p>
</div>
</li>
<li class="info-wrap hide">
<div class="hide info-json">
<p>Content That I Don't Want </p>
</div>
</li>
<li class="info-wrap no-meta">
<div class="hide info-json">
<p>Content That I Want - JSON Data </p>
</div>
</li>
这是我的代码:
soup = BeautifulSoup(res.text, "lxml")
for divTags in soup.findAll('li', class_ = re.compile('^(?!.*hide).*info-wrap.*$')):
for infoList in divTags.find_all('div',{'class':'hide info-json'}):
Curinfo = json.loads(infoList.text)
但它什么也不返回。
如果我在https://regex101.com/r/8yJ5yI/1 上检查这个正则表达式,它工作正常。请帮我看看怎么做。
对我来说,使用正则表达式不是必须的,我想要的只是<p>Content That I Want </p>
谢谢
【问题讨论】:
-
如果我使用
for divTags in soup.findAll(lambda tag: tag.name == 'li' and tag.get('class') == ['info-wrap']):,它会忽略带有info-wrap no-meta类的li标签 -
for divTags in soup.findAll('li'... 仔细阅读,然后再次查看您的 HTML。有道理,它不返回任何匹配项。
标签: python-3.x beautifulsoup findall