通过修改 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 页!
我查看了以下页面寻求帮助:
数据似乎不是由 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 小时。你可以 运行 一夜之间,它会在早上为你准备好。
我正在尝试抓取一家公司的盘中价格,使用这个网站: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 页!
我查看了以下页面寻求帮助:
数据似乎不是由 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 小时。你可以 运行 一夜之间,它会在早上为你准备好。