从随光标在屏幕上的位置变化的交互式图表中抓取数据

Web scraping data from an interactive chart that changes with cursor position on the screen

我正在尝试通过网络从 url、http://poker.srv.ualberta.ca/preflop 中抓取数据。在页面上,您会看到一个交互式 table,如果您将光标移到不同的方块上,它只会显示翻牌前的操作。我检查了源代码,所有信息都在 class 统计摘要中,但统计摘要随光标位置而变化。有没有办法使用 lxml 和请求来推断整个 table?我可以为一个职位做这件事,但不是全部。

到目前为止我的代码:

from lxml import html
import requests
page = requests.get("http://poker.srv.ualberta.ca/preflop")
tree = html.fromstring(page.content)

我认为仅使用 lxml 和请求无法做到这一点。这是一个 d3 图表,您可以使用像 phantomjs 这样的无头浏览器(模拟鼠标移动)来抓取它。如果您检查页面源(在 end ob body 标记之前),您尝试获取的数据可以作为 javascript 对象使用。这是我找到的文件的示例。 http://poker.srv.ualberta.ca/data/rPreflop.js

我看到没有 AJAX 调用来加载图表后面的数据。

他们加载该图表数据的唯一方法是从他们网站上的那些 JS 文件。

我建议您查看所有 JS 文件,看看它们是如何计算这些值的。

这是他们服务器上的一些 JS 文件。

http://poker.srv.ualberta.ca/data/crPreflop.js

http://poker.srv.ualberta.ca/data/cPreflop.js

你将不得不花一天的时间研究这些文件中的数据,你就会弄清楚。

您可以使用 "Selenium" 来模拟点击并按住动作,同时您可以获取并解析要抓取的文本。但是这种方式有点慢。

更好的方法是查看网站结构并跟踪源文件(通常是 csv 文件)的位置,然后简单地抓取该文件并对其进行解析。这样效率更高,但需要一些时间。