gpt4 book ai didi

python - 如何从没有很多结构的抓取页面中提取数据

转载 作者:行者123 更新时间:2023-11-28 00:04:09 25 4
gpt4 key购买 nike

我想对我刚刚在棒球统计网站上阅读的帖子进行一些分析。相关页面位于 http://www.fangraphs.com/blogs/fangraphs-crowd-the-top-47-free-agents/

我想抓取玩家名字下方段落标签中以玩家名字开头的数据( block 图像显示#他们在列表中的位置)。 (所以不是下面的表格数据。)

数据示例:

#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 标签上有名称属性。所以我可以捕获它。不幸的是,其余的数据似乎并没有在 html 中进行结构化处理以方便时尚。

我希望提取从“真实年份:8”到“假总数:119.7 美元”的数据。 (注意:其他一些玩家有不同的数据键,例如“将接受合格报价”。我知道所有这些键是什么,但不是每个玩家都有每个数据条目。)

我的策略是选择列表中的第一个玩家,然后从那里开始获取兄弟元素。如果同级元素的文本与我已知的键之一(“实际年份”等)匹配,则存储该元素的数值。如果兄弟元素是 <a>具有 name 属性的元素,那么我知道它是下一个玩家并进入循环的下一个迭代。

我很好奇其他人会如何解决这个问题。我觉得我的方法很笨拙,但这是我能想到的唯一方法,没有更多的页面 html 结构。

我正在使用 python 和 lxml.html 模块。

最佳答案

这听起来像是一次性工作,而且 html 的格式不适合解析,因此您不应该花太多精力为该网页编写完美的解析器。快速而肮脏的方式是要走的路。

一个更简单的解决方案是简单地复制页面文本,将其粘贴到您选择的文本编辑器中,然后将其另存为纯文本文件。然后您可以编写脚本来解析文本文件。

查找以“#”开头的行。这表示新玩家部分的开始。然后消耗这些行,直到下一个玩家的部分开始。

关于python - 如何从没有很多结构的抓取页面中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19532402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com