HTML 解析错误\xa0

HTML Parsing and erronous \xa0

我是编码领域的初学者,并尝试进行一些 HTML 抓取。我已经在一些早期的项目中取得了成功,但是我现在的项目没有成功。

问题与此站点有关: http://console.worldoftanks.com/encyclopedia/vehicles/usa/T1_Cunningham/ 我想从此站点(和类似站点)中提取数据。

但是,当我尝试提取诸如等级、价格等数据时,我 运行 遇到了问题。我的代码如下:


from bs4 import BeautifulSoup as BS
import lxml
import urllib2
from pprint import pprint
##

site="http://console.worldoftanks.com/encyclopedia/vehicles/usa/T1_Cunningham/"     
page=urllib2.urlopen(site)
soup= BS(page.read(),"lxml")

tank_tier = soup.findAll('span', {'data-class':"tank.tier"})
tier= tank_tier[0].contents
print "Tier is:", tier

main_stats= soup.findAll('div', {'class':"main-stats_item"})
print "\n\n Main stats:"
pprint(main_stats)

此代码的问题在于数据不知何故丢失了。这段代码的结果如下:

Tier is: [u'\xa0']

 Main stats:
[<div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/flags/usa.svg"></span>\n</span>\n<span data-class="tank.nation">\xa0</span>\n</span>\n<span class="main-stats_note">Nation</span>\n</div>,
 <div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/vehicle-types/lighttank.svg"></span>\n</span>\n<span data-class="tank.type">\xa0</span>\n</span>\n<span class="main-stats_note">Type</span>\n</div>,
 <div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/configuration/tier.svg"></span>\n</span>\n<span data-class="tank.tier">\xa0</span>\n</span>\n<span class="main-stats_note">Tier</span>\n</div>,
 <div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/currency/gold.svg"></span>\n</span>\n<span data-class="tank.price">\xa0</span>\n</span>\n<span class="main-stats_note">Cost</span>\n<span class="main-stats_price">(Silver)</span>\n</div>,
 <div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/configuration/weight.svg"></span>\n</span>\n<span data-class="tank.weight">\xa0</span> / <span data-class="tank.loadLimit">\xa0</span>t\n                    </span>\n<span class="main-stats_note">Weight / Load limit</span>\n</div>,
 <div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-stats_ico">\n<span class="svg-icon svg-icon__config js-svg-icon" data-src="//wxpcdn.gcdn.co/static/87ceef6/portal/img/svg-icons/configuration/hit-points.svg"></span>\n</span>\n<span data-class="tank.hitPoints">\xa0</span>\n</span>\n<span class="main-stats_note">Hit Points</span>\n</div>]

因此,首先,当我尝试查找某个特定值(如 Tier)时,它会将数据转换为 \xa0,这是一个不间断的 space 字符。如果我查找其他数据(结果的其他较长部分),可以看到 main-stats_item 下的所有数据都变成 \xa0 而不是实际值。

我尝试了多种方法,从使用 encode('utf-8') 到使用 lxml 库来创建 tree.xpath。使用树也会产生 \xa0 字符。

有谁知道为什么数据被替换为这些不间断的 space 字符?以及可能如何解决它?请注意,我不是要删除 \xa0,而是要获取应该位于该位置的数据。

我正在使用 Python 2.7

希望有人可以帮助初学者在编码世界中多走几步。 提前致谢:)

数据不是"lost"。

问题是代码是使用 javascript 动态创建的,因此您需要类似浏览器的体验来模拟 javascript 操作。

你必须使用 Selenium preferably with phantomjs 之类的东西作为无头浏览器!

您也可以使用 Splash,但它并不常见,对 selenium 用户有更多支持。