我已经设法使用带有H2 / Class / Div标签的美味汤中的findAll功能来抓取一个网站。 (例如,汤.findAll('div',{'class':'price'}) 但网站的一部分有P标签,我不知道如何刮。它有以下
上市历史
<p class="top">
<strong>First listed</strong><br>
800 on
我想要800但是Div Class“Sidebar sbt”在网站上有几个条目,p class = top。 任何帮助将不胜感激
谢谢
答案 0 :(得分:1)
您可以像使用BeautifulSoup的任何其他标记一样找到 p 标记:
>>> from bs4 import BeautifulSoup as BS
>>> with open('html', 'r') as f:
... soup = BS(f, "lxml")
...
>>> soup.find_all('p', attrs={'class':'top'})
[<p class="top">
<strong>First listed</strong><br/>
800 on
</p>]
如果有多个标记,则使用soup.find_all
将生成 ResultSet 。所以从那里你会做类似的事情:
>>> p_tags = soup.find_all('p', attrs={'class':'top'})
>>> for tag in p_tags:
... tag.get_text()
...
'\nFirst listed\n 800 on\n'
答案 1 :(得分:0)
如果真实情况就像示例一样
尝试这样的事情:
from bs4 import BeautifulSoup
>>> html = """<div class="price">
<p class="top">
<strong>First listed</strong><br>
800 on
</p>
<p class="top">
<strong>First listed</strong><br>
900 on
</p>
<p class="top">
<strong>First listed</strong><br>
1000 on
</p>
</div>"""
>>> soup = BeautifulSoup(html)
>>> div = soup.find_all('div', class_'price')
>>> for p_tag in div:
""" will search for all p tags in the div"""
... p = p_tag.find('p', class_='top').text.split()[-2]
""" will split the example with spaces and will make a list of result. if you want only the 800 use [-2]"""
... print(p)
# 800
# 900
# 1000