beautifulsoup 基本用法

载入:

import requests
from bs4 import BeautifulSoup res
= requests.get(url=url,headers=headers)#res=requests.post(url,data,headers=headers) res.raise_for_status() bs=BeautifulSoup(res.content,'lxml')

 

find_all 查找符合条件的所有元素

find查找符合条件的第一个元素

两种方法的句式基本一样

find_all的结果职能进行for循环,find_all后面不可加.find、.get等方法

查找标签:

bs.find('div')
bs.find('a')
bs.find('span')

查找标准属性(注意class_):

bs.find('div',class_=('title'))
bs.find('div',id=('title'))
bs.find('div',title=('title'))

查找特殊属性(网站自己定义的):

bs.find('div',attrs={'data-click-event':'WebModuleClick'})

 获取文本(两种方法似乎一样):

bs.find('div',class_=('title')).text
bs.find('div',class_=('title')).get_text()

 获取属性值:

bs.find('div',class_=('title')).get('href')

 查找兄弟标签:

bs.find('div',class_=('title')).next_sibling
bs.find('div',class_=('title')).previous_sibling

(另有.next_siblings 和 .previous_siblings是迭代对象)

 

如何找符合条件的第N个标签:

bs没有xpath那样选择第N个标签的方法,只能迭代,find_all或者find_all_next() 和 find_next(),.next_sibling 和 .previous_sibling等 

.next_siblings()只搜索兄弟节点,find_next()搜索子节点和兄弟节点

匹配字符串:

import re

bs.find('div',string=re.compile("成份列表"))#搜索内容,搜索关键字可以是字符串、正则表达式、列表、True
bs.find(href=re.compile(".xls"))#查找含有字符串的属性
bs.find_all(class_=re.compile("itl"))

 返回对象'NavigableString',不是标签,可以通过find_parent来定位所在的标签:

weight=bs.find('ul',class_='download clearfix mb-10').find(string=re.compile("成份权重"))
a=weight.find_parent('a')print(weight)
print(a)


成份权重
<a class="stats_index" href="http://www.csindex.com.cn/uploads/file/autofile/closeweight/000908closeweight.xls?t=1621176286" target="_blank"><i class="i_icon_excel"></i>成份权重</a>

 

限制find_all返回的结果数量

bs.find_all("a", limit=2)

只搜索直接子节点:recursive=False

 

posted @ 2021-04-06 14:20  shang的学习园地  阅读(555)  评论(0)    收藏  举报