我怎样才能从这个美丽的群体中提取出这个数字?

2024-09-30 16:36:37 发布

您现在位置:Python中文网/ 问答频道 /正文

<p class="topVenue-details-info-details-subtitle">
Outram Park
<span class="topVenue-details-info-details-subtitle distance" data- 
latitude="1.2783991" data-longitude="103.8408724"></span>
· ~$25/pax
</p>

我想提取“25美元/人”。HTML代码要长得多,价格也不同。有没有办法不提取标题和标签就提取出来? 我不想把这个输入:

places= soup.find_all('p', class_ = "topVenue-details-info-details-subtitle")

任何帮助都将不胜感激。谢谢。你知道吗


Tags: 代码infoparkdatahtmldetailsclassdistance
3条回答
from bs4 import BeautifulSoup

html_doc = """ 
<p class="topVenue-details-info-details-subtitle">
Outram Park
<span class="topVenue-details-info-details-subtitle distance" data- 
latitude="1.2783991" data-longitude="103.8408724"></span>
· ~$25/pax
</p>
"""

soup = BeautifulSoup(html, 'html.parser')

如果你的html有多个段落标签,比如你提到的那样,使用find\u all

places= soup.find_all('p', class_ = "topVenue-details-info-details-subtitle")

[soup.get_text().split('~')[1] for place in places ] 

如果您的html只有一个段落标记,请使用find

soup.find('p', class_ = "topVenue-details-info-details-subtitle").text.split('~')[1]

迭代这些位置,得到.text,然后split(),并得到最后一个元素:

[place.text.split()[-1] for place in places]

如果要从开始处去掉~

place.text.split()[-1].lstrip('~')

编辑:

根据您的评论,删除无关词:

[place.text.split()[-1].lstrip('~') for place in places if \
    place.text.split()[-1].startswith('~')]

在这种情况下,使用一个简单的for循环可以避免多次执行相同的操作:

output = []
for place in places:
    value = place.text.split()[-1]
    if value.startswith('~'):
        output.append(value.lstrip('~'))

您可以使用select one和css selector并获得next_sibling

s = """<p class="topVenue-details-info-details-subtitle">
Outram Park
<span class="topVenue-details-info-details-subtitle distance" data- 
latitude="1.2783991" data-longitude="103.8408724"></span>
· ~$25/pax
</p>"""

import requests
from bs4 import BeautifulSoup

soup = BeautifulSoup(s, 'html.parser')

places= soup.select_one("p.topVenue-details-info-details-subtitle span")
print(places.next_sibling.strip()) # · ~$25/pax

相关问题 更多 >