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
浙公网安备 33010602011771号