如何使用美丽的汤刮P标签

时间:2017-06-05 18:59:24

标签: python web-scraping beautifulsoup tags

我已经设法使用带有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。 任何帮助将不胜感激

谢谢

2 个答案:

答案 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