findall возвращает только последний атрибут - PullRequest
0 голосов
/ 23 ноября 2018

Я искал похожие вопросы, но не нашел то, что мне нужно.

В этом случае я ищу в Интернете два атрибута red и green в span

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 голосов
/ 23 ноября 2018

Поскольку ваш красный и зеленый являются единственными атрибутами класса, вы можете просто проверить диапазон с атрибутом класса

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)
0 голосов
/ 23 ноября 2018

Вы можете попробовать использовать селектор CSS, чтобы сопоставить span с обоими именами классов, как показано ниже:

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

Если вы все еще хотите использовать findAll, попробуйте

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