python 如何抓取标签元素的最后一串< p>?

pgx2nnw8  于 2023-01-16  发布在  Python
关注(0)|答案(2)|浏览(165)

首先,python是我学习的第一门语言,我正在抓取一个城市的租金价格网站,我使用BeautifulSoup来获取价格数据,但是我无法获取它的值
标签。
下面是标签:

<p><strong class="hidden show-mobile-inline">Monthly Rent: </strong>2,450 +</p>

下面是我的代码:

text = soup.find_all("div", {"class", "plan-group rent"})
for item in text:
    rent = item.find_all("p")
    for price in rent:
        print(price.string)

我也试过:

text = soup.find_all("div", {"class", "plan-group rent"})
for item in text:
    rent = item.find_all("p")
    for price in rent:
        items = price.find_all("strong")
        for item in items:
            print('item.string')

打印出"月租金:"是可以的,但是我不明白为什么我不能得到实际的价格,上面的代码告诉我月租金在strong标签中,这意味着p标签只包含我想要的价格。

wljmcqd8

wljmcqd81#

正如@kyrony提到的,在你的<p>中有两个孩子--因为你选择了<strong>,你只会得到其中一个文本。
您可以使用不同的方法stripped_strings

list(soup.p.stripped_strings)[-1]

contents

soup.p.contents[-1]

或使用recursive参数

soup.p.find(text=True, recursive=False)
示例
from bs4 import BeautifulSoup
html = '''<p><strong class="hidden show-mobile-inline">Monthly Rent: </strong>2,450 +</p>'''
soup = BeautifulSoup(html)

soup.p.contents[-1]
ulydmbyx

ulydmbyx2#

从技术上讲,您的内容有两个子项

<p><strong class="hidden show-mobile-inline">Monthly Rent: </strong>2,450 +</p>

一个强有力的标签

<strong class="hidden show-mobile-inline">Monthly Rent: </strong>

和一根细绳

2,450 +

beautiful soup中的字符串方法只接受一个参数,所以返回None。为了得到第二个字符串,你需要使用stripped_strings生成器。

相关问题