【发布时间】:2016-09-04 13:44:51
【问题描述】:
我是编码领域的初学者,并尝试进行一些 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,这是一个不间断的空格字符。如果我查找其他数据(结果的其他较长部分),可以看到 main-stats_item 下的所有数据都变为 \xa0 而不是实际值。
我尝试了多种方法,从使用 encode('utf-8') 到使用 lxml 库来创建 tree.xpath。使用树也会产生 \xa0 字符。
有谁知道为什么用这些不间断的空格字符替换数据?可能如何解决?请注意,我不是要删除 \xa0,而是要获取应该在该位置的数据。
我正在使用 Python 2.7
希望有人可以帮助初学者在编码世界中迈出更多的步伐。 在此先感谢:)
【问题讨论】:
标签: python-2.7 beautifulsoup html-parsing