使用Python和Selenium进行刮擦

时间:2018-05-22 00:49:56

标签: python selenium web-scraping

我正在尝试使用python刮掉下面的表格。尝试拉动html标签找到元素 id_dt1_NGY00 等等,但是一旦填充页面就无法找到它,所以有人告诉我使用Selenium并设法抓取一些数据。

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

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

Contract
Last  
Change
Open
High  
Low
Volume
Prev. Stl.
Time
Links

21年5月(NGK21)

2.550s
+0.006
2.550
2.550
2.550
1
2.544
05/21/18
Q / C / O

Jun '21(NGM21)

2.576s
+0.006
0.000
2.576
2.576
0
2.570
05/21/18
Q / C / O

以下代码 进口时间 来自bs4进口BeautifulSoup 来自selenium import webdriver 将pandas导入为pd

browser = webdriver.Chrome(executable_path =“C:\ Users \ siddk \ PycharmProjects \ WebSraping \ venv \ selenium \ webdriver \ chromedriver.exe”)

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

html = browser.page_source 汤= BeautifulSoup(html,'html.parser')

th_tags = soup.find_all('tr') 对于th_tags:        print(th.get_text())

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

1 个答案:

答案 0 :(得分:1)

尝试使用以下脚本获取表格数据。有必要找到包含相同表的right url,但不会动态生成,以便您可以在不使用任何浏览器模拟器的情况下进行操作。

试一试:

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)

Rusults就像:

['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']