beautifulSoup查找元素常用汇总

发布时间 2023-06-15 16:17:46作者: *飞飞*

0、初始化:

from bs4 import BeautifulSoup
pageSource = driver.page_source
soup = BeautifulSoup(pageSource,'html.parser')

1、标签名定位  

方法1:

soup.body

方法2:

li.select('a')

2、查找

2.1、单个查找

2.1.1、按text内容查找

xmSoup.find(text=re.compile(u'来源:'))    #含有XXX
xmSoup.find(text=re.compile(u'项目编号:$'))  #XXX结尾
xmSoup.find(text=re.compile(u'^项目编号:'))  #XXX开头
2.1.2、按标签名+class名查找
xmSoup.find('table',class_='form-panel-input-cls')

2.2、查找所有

2.2.1、按标签名查找

soup.find_all('input')[3]['value']  #第3个input标签的value属性

2.2.2、按标签名+class名查找

soup.find("ul",class_="po-pager").find_all('li')  #ul标签下所有的li标签
2.2.3、按text内容查找  同2.1.1

3、父节点

例1:

xmSoup.find(text=re.compile(u'^项目编号:')).parent  #tips:有时find的结果不能直接取text,而要先到parent再取text

例2:

BudgetPoint = xmSoup.find(text=re.compile(u'预算金额:$'))
BudgetRoot = BudgetPoint.parent.parent.parent.parent  #tips:有时取parent时,只上一个parent,并不是直接上一级parent,而要使用4个parent才能找到直接上一级parent

4、子节点

4.1、childrent

例1:

for BudgetTemp in BudgetRoot.children:
            Budget = Budget + BudgetTemp.text

例2:

i = 0
for TimeTemp in TimeEndParent.children:
   i = i+1
   if i == 4:                #tips:有时候,要找的是第2个child,但是要到第4个才是要找的第2个child
    TimeRange = TimeTemp.text

 

4.2、contents  tag的 .contents 属性可以将tag的子节点以列表的方式输出
例1:
Budget = xmSoup.find('tbody').contents[1].contents[4].text

例2:

xmTime.next_element.contents[1].text

 

5、上下移  #tips:用element找不到的时候,可以用try/catch换sibling

5.1、.next_sibling 和 .previous_sibling  使用 .next_sibling 和 .previous_sibling 属性来查询兄弟节点

xmSoup.find(text=re.compile(u'采购编号:$')).next_sibling.text

5.2、.next_element 和 .previous_element  .next_element 属性指向解析过程中下一个被解析的对象(字符串或tag),结果可能与 .next_sibling 相同,但通常是不一样的

try:
      xmID = xmSoup.find(text=re.compile(u'采购编号:$')).next_element.text
except:
      xmID = xmSoup.find(text=re.compile(u'采购编号:$')).next_sibling.text

6、获取text

例1:

xmSoup.find(text=re.compile(u'项目名称:$')).next_element.text

例2:

ggType = soup.font.text

7、获取属性

href =  tag[0]['href']