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
希望有人可以帮助初学者在编码世界中多走几步。
提前致谢:)
我是编码领域的初学者,并尝试进行一些 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
希望有人可以帮助初学者在编码世界中多走几步。 提前致谢:)