web-dev-qa-db-ja.com

BeautifulSoupでスパンタグからテキストを取得する方法

私はこのようなリンクを持っています

<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>

そこから1 GBを取得しようとしています。私は試した

tt  = [a['title'] for a in soup.select(".systemRequirementsRamContent span")]
for ram in tt:
    if "RAM" in ram.split():
        print (soup.string)

Noneを出力します。

a['text']を試しましたが、KeyErrorが発生しました。これをどのように修正できますか?私の間違いは何ですか?

10
GLHF

CSSセレクターを使用して、タイトルテキストを使用して必要なスパンをプルすることができます。

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)

(spantitle属性に[〜#〜] ram [〜#〜]が含まれていることがわかります。これはpythonで言うことと同じです、if "RAM" in span["title"]

またはfindre.compileとともに使用する

import re
print(soup.find("span", title=re.compile("RAM")).text)

すべてのデータを取得するには:

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)

それはあなたに与えるでしょう:

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
8

BeautifulSoupでspanタグを使用するか、classtitleなどの他の属性を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
1
Abu Shoeb