python - beautifulsoup的find问题
天蓬老师
天蓬老师 2017-04-18 09:38:16
[Python讨论组]

1、我在编码时,当txtb只有3层的时候,编码没问题,能达到我的目的。即查找节点,如果节点不存在,则添加节点,但是当txtb有4层的时候,find就查不到节点了。不知道什么原因。
具体编码如下

from bs4 import BeautifulSoup


user='cinyee'
proj='Christmas'

txtb="<b>behance</b>"
txtb="<b>behance<tusername>cinyee</tusername></b>"
txtb="<b>behance<tusername>cinyee<tprojname>Christmas</tprojname></tusername></b>"


soup = BeautifulSoup(txtb, "html.parser" )
print(soup.prettify())
print('-------------begin')
tuser=soup.find(name="tusername",text=user)
print(tuser)
if tuser is None:

    tag = soup.new_tag("tusername")
    tag.string = user

    soup.b.append(tag)
    print('--------1') 


else:
    
    tproj=tuser.find("tprojname",text=proj)

    if tproj is None:
        tag = soup.new_tag("tprojname")
        tag.string = proj
        tuser.append(tag)
        print('--------2') 
    else:
    
        tfile=tproj.find("tfilename",text=sfile)
        print('--------3') 
        if tfile is None:
            tag = soup.new_tag("tfilename")
            tag.string = sfile
            tproj.append(tag)

            
        print(tuser)
print('-------------end') 
print(soup.prettify())
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(1)
PHPz

text=xxx 这个条件去掉~

from bs4 import BeautifulSoup


user='cinyee'
proj='Christmas'

txtb="<b>behance</b>"
txtb="<b>behance<tusername>cinyee</tusername></b>"
txtb="<b>behance<tusername>cinyee<tprojname>Christmas</tprojname></tusername></b>"


soup = BeautifulSoup(txtb, "html.parser" )
print(soup.prettify())
print('-------------begin')
tuser=soup.find(name="tusername")#,text=user)
print(tuser)
##print(repr(tuser.text),repr(user+proj))
if tuser is None:

    tag = soup.new_tag("tusername")
    tag.string = user

    soup.b.append(tag)
    print('--------1') 


else:
    
    tproj=tuser.find("tprojname")#,text=proj)

    if tproj is None:
        tag = soup.new_tag("tprojname")
        tag.string = proj
        tuser.append(tag)
        print('--------2') 
    else:
    
        tfile=tproj.find("tfilename")#,text=sfile)
        print('--------3') 
        if tfile is None:
            tag = soup.new_tag("tfilename")
            tag.string = 'sfile'
            tproj.append(tag)

            
        print(tuser)
print('-------------end') 
print(soup.prettify())

用text来区分

这并不是个好主意~,通常是给标签添加属性来区分,例如:class=user

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

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