J'ai des liens qui ressemblent à ceci
<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>
J'essaie d'obtenir 1 GB
De là. j'ai essayé
tt = [a['title'] for a in soup.select(".systemRequirementsRamContent span")]
for ram in tt:
if "RAM" in ram.split():
print (soup.string)
Il génère None
.
J'ai essayé a['text']
mais cela me donne KeyError. Comment puis-je résoudre ce problème et quelle est mon erreur?
Vous pouvez utiliser un sélecteur css, tirant la plage que vous souhaitez en utilisant le texte du titre:
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)
Cela trouve le span avec un title attribut qui contient RAM , c'est équivalent à dire en python , if "RAM" in span["title"]
.
Ou en utilisant find avec re.compile
import re
print(soup.find("span", title=re.compile("RAM")).text)
Pour obtenir toutes les données:
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)
Ce qui vous donnera:
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
Vous pouvez simplement utiliser la balise span
dans BeautifulSoup ou vous pouvez inclure d'autres attributs comme class
, title
avec la balise span
.
from BeautifulSoup import BeautifulSoup as BSHTML
htmlText = """<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>"""
soup = BSHTML(htmlText)
spans = soup.findAll('span')
# spans = soup.findAll('span', attrs = {'class' : 'your-class-name'}) # or span by class name
# spans = soup.findAll('span', attrs = {'title' : '000 Plus Minimum RAM Requirement'}) # or span with a title
for span in spans:
print span.text