使用Python和Selenium的刮表

Scraping Table using Python and Selenium

我正试图用python刮掉下面的表。尝试拉HTML标记来查找元素id_dt1_ngy00等等,但是一旦填充了页面,就找不到它了,所以有人告诉我使用Selenium并成功地获取了一些数据。

https://www.insidefutures.com/markets/data.php?page=quote&sym=ng&x=13&y=8页

这些数字每10分钟更新一次,所以这个网站是动态的。使用下面的代码,但它以线性格式打印所有内容,而不是以表格形式显示为行和列的格式。下面包括两个部分的样本输出

1
2
3
4
5
6
7
8
9
10
Contract
Last  
Change
Open
High  
Low
Volume
Prev. Stl.
Time
Links

五月21日(NGK21)

1
2
3
4
5
6
7
8
9
2.550s
+0.006
2.550
2.550
2.550
1
2.544
05/21/18
Q / C / O

Jun’21(NGM21)

1
2
3
4
5
6
7
8
9
2.576s
+0.006
0.000
2.576
2.576
0
2.570
05/21/18
Q / C / O

下面的代码导入时间来自BS4进口美汤来自Selenium导入WebDriver将熊猫作为PD导入

browser=webdriver.chrome(可执行文件u path="c:userssiddkpycharmprojectswebsrapingvenvseleniumwebdriverchromedriver.exe")

browser.get("https://www.insidefutures.com/markets/data.php?"page=quote&sym=ng&x=14&y=16")

html=browser.page_源soup=beautifulsoup(html,'html.parser')

thu tags=汤。查找所有(tr)对于标签中的th:打印(th.get_text())

我想在熊猫中提取这些数据,并每天分析平均值等。请帮忙。我已经用尽了自己的力量,通过多次迭代来编写代码。


尝试以下脚本以获取表格数据。需要找到正确的URL,该URL包含相同的表,但不会动态生成,这样您就可以在不使用任何浏览器模拟器的情况下执行操作。

试一试:

1
2
3
4
5
6
7
8
9
10
from bs4 import BeautifulSoup
import requests

url ="https://shared.websol.barchart.com/quotes/quote.php?page=quote&sym=ng&x=13&y=8&domain=if&display_ice=1&enabled_ice_exchanges=&tz=0&ed=0"

res = requests.get(url)
soup = BeautifulSoup(res.text,"lxml")
for tr in soup.find(class_="bcQuoteTable").find_all("tr"):
    data = [item.get_text(strip=True) for item in tr.find_all(["th","td"])]
    print(data)

结果是:

1
2
3
4
5
['Contract', 'Last', 'Change', 'Open', 'High', 'Low', 'Volume', 'Prev. Stl.', 'Time', 'Links']
['Cash (NGY00)', '2.770s', '+0.010', '0.000', '2.770', '2.770', '0', '2.760', '05/21/18', 'Q/C/O']
["Jun \'18 (NGM18)", '2.901', '-0.007', '2.902', '2.903', '2.899', '138', '2.908', '17:11', 'Q/C/O']
["Jul \'18 (NGN18)", '2.927', '-0.009', '2.928', '2.930', '2.926', '91', '2.936', '17:11', 'Q/C/O']
["Aug \'18 (NGQ18)", '2.944', '-0.008', '2.945', '2.947', '2.944', '42', '2.952', '17:10', 'Q/C/O']