无法抓取页面的同一部分,唯一的区别是div和span

时间:2018-10-19 17:53:27

标签: python lxml

我目前正试图学习抓地力,因此我正试图去掉futbin以获得FIFA球员数据。我现在在this link的Gary Lineker工作(例如)。当我尝试抓取他的统计信息时(例如说加速)。它仅适用于数字,不适用于实际文本。

这两个一起工作,并与统计信息一起构成一个列表。

stats = doc.xpath('//*[@class="stat_val"]/text()')

<div class="stat_val">90</div>

但是,这两个什么都没有创建,只是一个空列表。

statNames = doc.xpath('//span[@class="ig-stat-name-tooltip tooltipstered"]/text()')

<span class="ig-stat-name-tooltip tooltipstered">Acceleration</span>

可以这么说,两者都是同一个小组。这是完整的代码:

<div class=" row_sep sub_stat">
    <div class="stat_holder_sub  left_stat_name" style="display: inline-block;">
        <span class="ig-stat-name-tooltip tooltipstered">Acceleration</span>
    </div>
    <div id="sub-acceleration-val-0" class="stat_val  acceleration-val-0 stat_text_dark_green" style="display: inline-block;">
        <div class="stat_diff" style=" display: inline-block;"></div>
        <div class="stat_diff_cards" style=" display: none;"></div>
        <div class="stat_val">90</div>
    </div>
</div>

实际区别是什么?都不应该都这样吗?

1 个答案:

答案 0 :(得分:0)

如果您从xpath中省略了tooltipstered,例如下面的代码,则会得到您想要的结果:

import requests
from lxml import html

url = 'https://www.futbin.com/19/player/19/Gary%20Lineker/'
page = requests.get(url)
tree = html.fromstring(page.content)
statNames = tree.xpath('//*[@class="ig-stat-name-tooltip"]/text()')

print([res for res in statNames])

结果:

['Pace', 'Acceleration', 'Sprint Speed', 'Shooting', 'Positioning', 'Finishing', 'Shot Power', 'Long Shots', 'Volleys', 'Penalties', 'Passing', 'Vision', 'Crossing', 'FK. Accuracy', 'Short Passing', 'Long Passing', 'Curve', 'Dribbling', 'Agility', 'Balance', 'Reactions', 'Ball Control', 'Dribbling', 'Composure', 'Defending', 'Interceptions', 'Heading Accuracy', 'Marking', 'Standing Tackle', 'Sliding Tackle', 'Physicality', 'Jumping', 'Stamina', 'Strength', 'Aggression']