python - 怎么从BeautifulSoup得到的ResultSet里搜索想要的部分?
黄舟
黄舟 2017-04-17 17:09:55
[Python讨论组]

python脚本里的语句是

from bs4 import BeautifulSoup
import urllib2

response = urllib2.urlopen('http://xxxxxx')
html = response.read()
soup = BeautifulSoup(html)

res = soup.find_all(class_='pro-detail-price')

得到的res是ResultSet类型,print结果是:

[<p class="pro-detail-price">最低价格:<span>4399.0</span>(天猫旗舰店)
<p class="pro-detail-trend">
<iframe frameborder="0" height="210" scrolling="no" src="http://tool.manmanbuy.com/historyPro.aspx?w=290&amp;amp;h=210&amp;m=1&amp;e=0&amp;scroll=0&amp;id=327958" width="290"></iframe>
</p>
</p>]

如果想在这个ResultSet里找到特定的标签改用什么办法呢? 比如找到<span>4399.0</span>里的4399.0

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(6)
PHP中文网
res = soup.find(class_='pro-detail-price').find('span').string

这么可以吗?

巴扎黑

我记得find只会返回第一个匹配到的结果,findAll才会返回ResultSet
所以find结果应该可以直接 res.span.string啊,实在不行就都res[0].span.string吧

大家讲道理

find_all()find()都不好用,bs最好用的是select(),即CSS选择器。
你已经获取了一个大框架吧,比如它是soup中的一个Tag,然后:

results = tag.select('p[class="pro-detail-price"] span')

你这个例子里,results[0]就是这个指定的标签了。

大家讲道理
from bs4 import BeautifulSoup
import urllib2

response = urllib2.urlopen('http://xxxxxx')
html = response.read()
soup = BeautifulSoup(html)

res = soup(class_='pro-detail-price')

for sp in res:
    print sp.span.string

胡乱试了一下,改成这样的代码输出结果是4399.0,但是希望大神能提供更优的方式,谢谢

怪我咯

在find找到的结果里,可以用CSS选择器select进行下一的了定位查找。

怪我咯
soup.find("p", class_='pro-detail-price').find("span").text
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号