如何从BeautifulSoup中的span标签获取文本

GLH*_*LHF 8 python beautifulsoup web-scraping python-3.4

我的链接看起来像这样

<div class="systemRequirementsMainBox">
<div class="systemRequirementsRamContent">
<span title="000 Plus Minimum RAM Requirement">1 GB</span> </div>
Run Code Online (Sandbox Code Playgroud)

我想1 GB从那里开始.我试过了

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

它输出None.

我试过a['text']但它给了我KeyError.我怎么能解决这个问题,我的错误是什么?

Pad*_*ham 8

您可以使用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)
Run Code Online (Sandbox Code Playgroud)

找到包含RAM的title属性的span,它相当于在python中说,.if "RAM" in span["title"]

或者使用find with re.compile

import re
print(soup.find("span", title=re.compile("RAM")).text)
Run Code Online (Sandbox Code Playgroud)

获取所有数据:

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)
Run Code Online (Sandbox Code Playgroud)

哪个会给你:

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
Run Code Online (Sandbox Code Playgroud)


小智 7

find_all()我尝试使用 (BeautifulSoup) 中的函数提取 HTML 文档内所有 span 标记内的文本bs4:

from bs4 import BeautifulSoup
import requests
url="YOUR_URL_HERE"
response=requests.get(url)
soup=BeautifulSoup(response.content,html5lib)
spans=soup.find_all('span',"ENTER_Css_CLASS_HERE")
for span in spans:
  print(span.text)
Run Code Online (Sandbox Code Playgroud)