通过修改 javascript 参数来抓取网页数据

web scraping data by modifying javascript parameters

我正在尝试抓取一家公司的盘中价格,使用这个网站:Enel Intraday

网站拉取数据的时候,会分成几百页,拉取数据非常耗时。 使用 insomnia.rest(第一次),我一直在尝试使用 URL GET 或尝试找到 returns 这些 table 值但没有的实际 javascrip 函数成功。

检查搜索按钮后,我发现 JS 函数称为“searchIntraday”,并使用名为“intraday_form”的表单作为输入。

我基本上是想在 1 个调用中获取以下数据,而不必浏览所有标签页,所以一整天看起来像这样:

Time    Last Trade Price    Var %   Last Volume Type
5:40:49 PM  7.855   -2.88   570 AT
5:38:17 PM  7.855   -2.88   300 AT
5:37:10 PM  7.855   -2.88   290 AT
5:36:06 PM  7.855   -2.88   850 AT
5:35:56 PM  7.855   -2.88   14,508,309  UT
5:29:59 PM  7.872   -2.67   260 AT
5:29:59 PM  7.871   -2.68   4,300   AT
5:29:59 PM  7.872   -2.67   439 AT
5:29:59 PM  7.872   -2.67   3,575   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    1,000   AT
5:29:59 PM  7.87    -2.7    4,000   AT
5:29:59 PM  7.87    -2.7    300 AT
5:29:59 PM  7.87    -2.7    2,000   AT
5:29:59 PM  7.87    -2.7    200 AT
5:29:59 PM  7.87    -2.7    400 AT
5:29:59 PM  7.87    -2.7    500 AT
5:29:59 PM  7.872   -2.67   1,812   AT
5:29:59 PM  7.872   -2.67   5,000   AT

................................................ .....

Time    Last Trade Price    Var %   Last Volume Type
9:00:07 AM  8.1 0.15    933,945 UT

那天从第 1 页迭代到第 1017 页!

我查看了以下页面寻求帮助:

JS Scrape article

数据似乎不是由 javascript 生成的,而是由加载页面生成的。下图是我在下面加载 link 时得到的响应。您可以看到请求的位置与页面上的位置匹配,并且 table 的 HTML 与页面响应一起发送。

响应中的HTML表示页面是在服务器端而不是客户端生成的。不幸的是,除非您找到一种可以一次浏览并查看所有想要的结果的方法,否则您将不得不遍历每个页面。如果你设法找到了一个魔法 url,你可以只处理那个魔法。

https://www.borsaitaliana.it/borsa/azioni/contratti.html?isin=IT0003128367&lang=en&page=10

我决定试一试,看看我能得到什么样的表现。下面是一个遍历前 100 页的完整脚本。

import pandas as pd
import requests

url = "https://www.borsaitaliana.it/borsa/azioni/contratti.html?isin=IT0003128367&lang=en&page="

df = pd.concat([
    pd.read_html(requests.get(url + str(page)).content)[0] 
    for page in range(100)
])

df.to_csv('enel.csv', index=False)

运行 在我的机器上,100 页用了 1.25 分钟。

$ time python scrape.py 

real    1m16.914s
user    0m4.039s
sys 0m0.729s

每只股票大约需要 15 分钟。假设 30 只股票的长度都差不多,我猜这就是 7.5 小时。你可以 运行 一夜之间,它会在早上为你准备好。