我想對我剛剛閱讀的棒球統計站點上的文章進行一些分析。有問題的頁面可以在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,但它確實有在名稱屬性一個標籤。所以我可以抓住它。不幸的是,其餘的數據似乎並沒有在html中構建,很容易獲得時尚。
我期待通過「假總數:$ 119.7」來提取「真實年:8」的數據。 (注意:其他一些玩家有不同的數據密鑰,例如「Will will qualifying offer」,我知道所有這些密鑰都是什麼,但並不是每個玩家都有數據輸入。)
我的策略是選擇列表中的第一位玩家,並開始從那裏抓取兄弟元素。如果兄弟元素的文本與我已知的某個鍵(「真實年」等)匹配,則存儲該數字值。如果兄弟元素是一個具有名稱屬性的元素,那麼我知道它是下一個玩家並轉到循環的下一次迭代。
我很好奇其他人會如何解決這個問題。我覺得我的方式笨重,但這是我能想象的唯一方法,沒有更多的HTML頁面結構。
我正在使用python和lxml.html模塊。
同意我不會花太多時間在它上面。我只是好奇,有興趣將此作爲一種學習情境。你對文本編輯器的建議是顯而易見的,謝謝! –