python - Cómo obtener texto de la etiqueta span en BeautifulSoup
web-scraping python-3.4 (1)
Tengo enlaces como este
<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>
Estoy tratando de obtener 1 GB
desde allí. Lo intenté
tt = [a[''title''] for a in soup.select(".systemRequirementsRamContent span")]
for ram in tt:
if "RAM" in ram.split():
print (soup.string)
Emite None
.
Intenté a[''text'']
pero me da KeyError. ¿Cómo puedo solucionar esto y cuál es mi error?
Puede usar un selector css, tirando del tramo que desee utilizando el texto del título:
soup = BeautifulSoup("""<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>""", "xml")
print(soup.select_one("span[title*=RAM]").text)
Que encuentre el lapso con un atributo de título que contenga RAM , es equivalente a decir en python, if "RAM" in span["title"]
.
O utilizando find con re.compile
import re
print(soup.find("span", title=re.compile("RAM")).text)
Para obtener todos los datos:
from bs4 import BeautifulSoup
r = requests.get("http://www.game-debate.com/games/index.php?g_id=21580&game=000%20Plus").content
soup = BeautifulSoup(r,"lxml")
cont = soup.select_one("div.systemRequirementsRamContent")
ram = cont.select_one("span")
print(ram["title"], ram.text)
for span in soup.select("div.systemRequirementsSmallerBox.sysReqGameSmallBox span"):
print(span["title"],span.text)
Lo cual te dará:
000 Plus Minimum RAM Requirement 1 GB
000 Plus Minimum Operating System Requirement Win Xp 32
000 Plus Minimum Direct X Requirement DX 9
000 Plus Minimum Hard Disk Drive Space Requirement 500 MB
000 Plus GD Adjusted Operating System Requirement Win Xp 32
000 Plus GD Adjusted Direct X Requirement DX 9
000 Plus GD Adjusted Hard Disk Drive Space Requirement 500 MB
000 Plus Recommended Operating System Requirement Win Xp 32
000 Plus Recommended Hard Disk Drive Space Requirement 500 MB