Python 2.7 HTML解析和错误\xa0

Python 2.7 HTML解析和错误\xa0,python-2.7,beautifulsoup,html-parsing,Python 2.7,Beautifulsoup,Html Parsing,我是一名编程新手,曾尝试过一些HTML抓取。我已经在一些早期的项目中取得了成功,但我当前的项目不起作用 问题与此站点有关: 我想从这个网站(和类似的网站)提取数据 然而,当我试图提取诸如层、价格等数据时,我遇到了一个问题。我的代码如下: Tier is: [u'\xa0'] Main stats: [<div class="main-stats_item">\n<span class="main-stats_title">\n<span class="main-

我是一名编程新手,曾尝试过一些HTML抓取。我已经在一些早期的项目中取得了成功,但我当前的项目不起作用

问题与此站点有关: 我想从这个网站(和类似的网站)提取数据

然而,当我试图提取诸如层、价格等数据时,我遇到了一个问题。我的代码如下:

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 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>]
层是:[u'\xa0']
主要统计数据:
[\n\n\n\n\n\xa0\n\n操作\n,
\n\n\n\n\n\xa0\n\n键入\n,
\n\n\n\n\n\xa0\n\n,
\n\n\n\n\n\xa0\n\n成本\n(银色)\n,
\n\n\n\n\n\xa0/\xa0t\n\n重量/负载限制\n,
\n\n\n\n\n\xa0\n\n它的点\n]
因此,首先,当我尝试查找某些特定值(如层)时,它会将数据转换为\xa0,这是一个不间断的空格字符。如果我查找其他数据(结果的另一个较长部分),可以看到main-stats_项下的所有数据都变成\xa0,而不是实际值

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

有人知道为什么用这些不间断的空格字符替换数据吗?可能怎么解决呢?请注意,我不是要删除\xa0,而是要获取应该位于该位置的数据

我正在使用Python 2.7

希望有人能帮助初学者进入编码领域。 提前感谢:)

数据没有“丢失”

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

您将不得不使用类似的东西作为无头浏览器


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

谢谢您的帮助!我现在可以看到汤中的数据了。我仍然需要找出一种方法,如何单击不同的按钮以获取所有不同的数据,但这是一个良好的开端。再次感谢您的快速回复@丹尼斯,如果我有任何帮助,请接受答案:)@Dennis,你根本不需要bs4。如果你使用selenium,你可以使用XPath和selects来解析源代码。@PadraicCunningham他不需要,但拥有它很好,很多人选择拥有它,因为它更容易导航节点。我接受了答案@Rafaelalmeda。我忘了,所以谢谢你的提醒。我想我会先尝试用bs4解决这个问题,因为我有一些使用它的经验,但也有一些使用selenium的经验。谢谢你的主意,帕德雷坎宁厄姆