findall仅返回最后一个属性

时间:2018-11-23 13:26:30

标签: python web-scraping findall

我搜索了类似的问题,但没有找到我所需要的。

在这种情况下,我正在网上搜索redgreenspan的两个属性

from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen('http://www.pythonscraping.com/pages/warandpeace.html')
soup=BeautifulSoup(html,'html.parser')
nameList=soup.findAll("span",{"class":"red","class":"green"})
print(nameList)

但是我只获得绿色属性,我尝试使用

nameList,nameList2=soup.findAll("span",{"class":"red","class":"green"})

但我收到错误ValueError: too many values to unpack (expected 2) 有没有办法打印两个属性并将每个属性存储在名称列表中(不使用多个findAll

2 个答案:

答案 0 :(得分:0)

您可以尝试使用CSS选择器将span与两个类名进行匹配,如下所示:

nameList = soup.select("span.red, span.green")

如果您仍然想使用findAll,请尝试

nameList = soup.findAll("span",{"class":["red", "green"]})

答案 1 :(得分:0)

由于红色和绿色是唯一的类别属性,因此您可以使用类别属性检查跨度

from urllib.request import urlopen
from bs4 import BeautifulSoup
html=urlopen('http://www.pythonscraping.com/pages/warandpeace.html')
soup=BeautifulSoup(html,'html.parser')
nameList=soup.select("span[class]")
print(nameList)

要有单独的列表,您可以使用2个选择的类名:

reds = soup.select('span.red')
greens = soup.select('span.green')
print(reds,greens)