如何用BeautifulSoup精准抓取同层级同class的目标单个div?
如何用BeautifulSoup精准抓取同层级下指定的单个div元素
当页面中存在多个同层级、同class属性的div元素时,需要通过精准定位来抓取目标元素。以下针对你的示例场景,分析错误原因并给出修正方案:
错误代码分析
你当前的select方法使用方式有误:select的第一个参数是CSS选择器字符串,不需要额外传入字典参数。原写法导致返回了页面中所有div元素,因此输出出现大量None和无关内容。
修正方案
方法1:使用CSS伪类选择器直接定位
通过nth-of-type(3)选中第三个.parent元素,再定位其内部的目标div:
from bs4 import BeautifulSoup htmld_doc = """ <div class="main"> <div class="parent"> <div class="css-1wi2w6s enb64yk4">1</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">2</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">3</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">4</div> </div> </div> """ doc = BeautifulSoup(htmld_doc, 'html.parser') # 精准定位第三个.parent下的目标div target_div = doc.select_one('.main .parent:nth-of-type(3) .css-1wi2w6s.enb64yk4') print(target_div.string)
方法2:先获取同层级元素列表,再通过索引选择
先抓取所有.parent元素,再通过索引(从0开始)选取第三个,最后查找其内部的目标div:
from bs4 import BeautifulSoup htmld_doc = """ <div class="main"> <div class="parent"> <div class="css-1wi2w6s enb64yk4">1</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">2</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">3</div> </div> <div class="parent"> <div class="css-1wi2w6s enb64yk4">4</div> </div> </div> """ doc = BeautifulSoup(htmld_doc, 'html.parser') # 获取所有.parent元素 parent_divs = doc.find_all('div', class_='parent') # 选取第三个.parent(索引为2),再找内部目标div target_div = parent_divs[2].find('div', class_='css-1wi2w6s enb64yk4') print(target_div.string)
两种方法的输出结果均为:
3
内容的提问来源于stack exchange,提问作者Inexpli
相关产品推荐
相关产品推荐

