Html BeatifulSoup-尝试获取span标记内的文本
我想在span标记内提取文本,但当我尝试使用.text或get_text()时,会出现错误(在打印span之后或在for循环中)。我错过了什么?我刚刚设置了它,以便对col类的第一个div执行此操作,只是为了测试它是否工作,但我希望它也能对第二个div工作 谢谢 我的密码-Html BeatifulSoup-尝试获取span标记内的文本,html,text,beautifulsoup,Html,Text,Beautifulsoup,我想在span标记内提取文本,但当我尝试使用.text或get_text()时,会出现错误(在打印span之后或在for循环中)。我错过了什么?我刚刚设置了它,以便对col类的第一个div执行此操作,只是为了测试它是否工作,但我希望它也能对第二个div工作 谢谢 我的密码- premier_soup1 = player_soup.find('div', {'class': 'row-table details -bp30'}) premier_soup_tr = premier_soup1.fi
premier_soup1 = player_soup.find('div', {'class': 'row-table details -bp30'})
premier_soup_tr = premier_soup1.find_all('div', {'class': 'col'})
for x in premier_soup_tr[0]:
spans = x.find('span')
print (spans)
输出
-1
<span itemprop="name">Alisson Ramses Becker</span>
-1
<span itemprop="birthDate">02/10/1992</span>
-1
<span itemprop="nationality"> Brazil</span>
-1
>>>
-1
艾莉森·拉美西斯·贝克尔
-1
02/10/1992
-1
巴西
-1
>>>
HTML
<div class="col">
<p>Name: <strong><span itemprop="name">Alisson Ramses Becker</span> </strong></p>
<p>Date of birth:<span itemprop="birthDate">02/10/1992</span></p>
<p>Place of birth:<span itemprop="nationality"> Brazil</span></p>
</div>
<div class="col">
<p>Club: <span itemprop="affiliation">Liverpool</span></p>
<p>Squad: 13</p><p>Position: Goal Keeper</p>
</div>
姓名:Alisson Ramses Becker
出生日期:1992年10月2日
出生地:巴西
俱乐部:利物浦
阵容:13人位置:守门员
如果您只需要跨距中的文本,可以专门搜索跨距:
soup = BeautifulSoup(html, 'html.parser')
spans = soup.find_all('span')
for span in spans:
print(span.text)
如果要查找具有特定div的跨距,可以执行以下操作:
divs = soup.find_all( 'div', {'class': 'col'})
for div in divs:
spans = div.find_all('span')
for span in spans:
print(span.text)
如果您只需要在冒号后面输入所有值,可以搜索段落标记:
soup = BeautifulSoup(html, 'html.parser')
divs = soup.find_all( 'div', {'class': 'col'})
for div in divs:
ps = div.find_all('p')
for p in ps:
print(p.text.split(":")[1].strip())
Kyle的答案是好的,但是为了避免像您所说的那样多次打印相同的值,您需要稍微更改逻辑。首先,解析并将找到的所有匹配项添加到列表中,然后循环遍历包含所有匹配项的列表并打印它们。 另一件你可能不得不考虑的问题是:
<div class=col>
<div class=col>
<span/>
</div>
</div>
通过使用列表而不是立即打印,您可以处理与任何现有记录相同的任何匹配
在上面的html示例中,您可以看到如何将跨度添加两次,以及如何在Kyle建议的答案中找到匹配项。这一切都是为了确保您创建的逻辑只会找到您需要的匹配项。你如何做到这一点通常/总是取决于html的格式,但创意也很重要!
祝你好运。谢谢。第二个建议似乎给了我重复的输出。见下页Alisson Ramses Becker,1992年10月2日,巴西,利物浦,Alisson Ramses Becker,1992年10月2日,巴西,利物浦。另外,第二个div只有第一行作为我需要的跨度,然后第二行和第三行只包含p标记,我需要这些数据。听起来你只需要冒号后面的值。如果是这样的话,您可以找到段落标记,然后在冒号上拆分文本。见我的编辑在上面的答案。谢谢你的回答。你能给我举个例子,说明我会如何立即使用这个列表吗?我现在得到了我需要的。基本上在一个循环中得到了div1+div2的跨度,然后转到下一个div,得到了p,标签,并剥离了文本(在kyles的帮助下)。当我执行“全部查找”并将其分配给s字符串并检查类型时,它的类型为。例如-span=div.find_all('span')现在是一个列表,还是我需要做些其他事情使其成为一个合适的列表?