beautifulsoup的find问题

新手上路,请多包涵

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())
阅读 2.2k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题