我想对我刚刚在棒球统计网站上阅读的帖子进行一些分析。有问题的页面位于http://www.fangraphs.com/blogs/fangraphs-crowd-the-top-47-free-agents/
我想抓取以玩家名字开头的数据(块图像显示他们在列表中的#),这些数据位于玩家名字下方的段落标签中。(所以不是下面的表格数据。)
数据示例:
#1 Robinson Cano (2B)
Age PA BB% K% AVG OBP SLG wOBA wRC+ Off Def WAR
30 681 9.5% 12.5% .314 .383 .516 .384 142 30.6 2.5 6.0
Real Years: 8
Real AAV: $24.5
Real Total: $196.2
Fake Years: 5
Fake AAV: $23.9
Fake Total: $119.7
Representative Comment
“I wouldn’t want to guarantee salary past age 37 or age 38. I could see him getting more years than that, at the same AAV I am willing to pay in fake world.”
[next player in example]...
#2 Jacoby Ellsbury
[etc.]
编号的项目 (#1) 不在 OL 中,但它在 a 标记上确实具有 name 属性。所以我可以抓住它。不幸的是,其余的数据似乎并没有以易于流行的方式在 html 中结构化。
我正在寻找从“真实年份:8”到“假总计:119.7 美元”的数据。(注意:其他一些玩家有不同的数据键,例如,“将接受合格的报价”。我知道所有这些键是什么,但不是每个玩家都有每个数据条目。)
我的策略是选择列表中的第一个玩家,然后从那里开始抓取兄弟元素。如果兄弟元素的文本与我的已知键之一(“真实年份”等)匹配,则存储其数值。如果兄弟元素是<a>
具有 name 属性的元素,那么我知道它是下一个玩家并进入循环的下一个迭代。
我很好奇其他人会如何处理这个问题。我觉得我的方式很笨拙,但这是我能想象的唯一一种方法,页面没有更多的 html 结构。
我正在使用 python 和 lxml.html 模块。