无法获取<span>标签及表格内span文本问题求助(附Python代码)
解决无法获取标签文本的问题
我来帮你排查下代码里的核心问题,这两个点是导致你拿不到文本的关键:
问题1:findAll返回的是元素列表,不能直接调用find_all
你用soup.findAll("div", {"class" : "iw_component","id":"c1417094965154"})得到的table是一个元素列表(哪怕页面只有一个符合条件的div),直接对列表调用find_all()会触发AttributeError。你需要要么遍历这个列表,要么如果确定页面只有一个目标div,改用find()代替findAll()来获取单个元素。
问题2:recursive=False限制了查找范围
当你设置recursive=False时,BeautifulSoup只会查找当前元素的直接子节点。而表格内的<span>肯定是嵌套在<table>、<tr>、<td>这些标签里面的,并不是目标div的直接子元素,所以用这个参数会完全漏掉表格里的span。默认情况下recursive=True,会递归查找所有层级的子元素,这才是你需要的。
修改后的代码示例
情况1:页面只有一个目标div
from bs4 import BeautifulSoup import urllib2 url1 = "url" content1 = urllib2.urlopen(url1).read() soup = BeautifulSoup(content1,"lxml") # 用find()获取单个目标div元素 target_div = soup.find("div", {"class" : "iw_component","id":"c1417094965154"}) # 递归查找所有span,包括表格内的嵌套span all_spans = target_div.find_all('span') for span in all_spans: print(span.text)
情况2:页面有多个符合条件的div
from bs4 import BeautifulSoup import urllib2 url1 = "url" content1 = urllib2.urlopen(url1).read() soup = BeautifulSoup(content1,"lxml") # 遍历每个符合条件的div for target_div in soup.findAll("div", {"class" : "iw_component","id":"c1417094965154"}): all_spans = target_div.find_all('span') for span in all_spans: print(span.text)
如果只想提取表格内的span,可以先定位到表格再查找:
# 在目标div内先找到表格元素 table = target_div.find('table') if table: table_spans = table.find_all('span') for span in table_spans: print(span.text)
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

