我想从网页中提取数据,但最后我无法在工作表中写入数据。数据是表格形式(多行,列)吗?

时间:2019-04-14 04:39:29

标签: excel vba

无法从网页中提取数据,也无法在工作表中写入数据。

子pulldata()

'声明

Dim IE As Object
Dim doc As HTMLDocument

'启动应用程序

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

'导航

IE.navigate "https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=NIFTY&date=25APR2019"

'循环直到加载页面

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop

'将数据放入网页中,然后单击提交

Set doc = IE.document

doc.getElementById("underlyStock").Value = ThisWorkbook.Sheets("URLList").Range("A2").Value
doc.parentWindow.execScript "goBtnClick('stock');", "javascript"

'循环直到加载页面

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop

'将数据从elementid-“ octable”拉到工作表-“ nse”

strVal = doc.getElementById("octable").innerText
ThisWorkbook.Sheets("nse").Range("A1").Offset(r, 0).Value = strVal
r = r + 1

结束子

我要在nse表(表名)中添加表数据。

2 个答案:

答案 0 :(得分:0)

可以尝试这样的操作,我只能用Nifty Data尝试成功,因为我不知道SBI的底层符号(“ SBIN”除外),即使在手动浏览中,它也给出页面“ Internal Server Error-Read”(可能是由于是星期天)。

可以尝试使用您的基础符号(可能在适当的时候)

代码:

Sub pulldata()
'declaration
Dim IE As Object
Dim doc As HTMLDocument
'start application
Dim Tbl As HTMLTable, Cel As HTMLTableCell, Rw As HTMLTableRow, Col As HTMLTableCol
Dim TrgRw As Long, TrgCol As Long



Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
'navigation

IE.navigate "https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=NIFTY&date=25APR2019"
'loop until load page

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop
'put data in webpage and click on submit

Set doc = IE.document

'doc.getElementById("underlyStock").Value = ThisWorkbook.Sheets("URLList").Range("A2").Value
'doc.parentWindow.execScript "goBtnClick('stock');", "javascript"
'loop until load page

Do While IE.Busy Or IE.readyState <> 4
Application.Wait DateAdd("s", 1, Now)
Loop
'pull data from elementid- "octable" to sheet- "nse"

Set Tbl = doc.getElementById("octable")


TrgRw = 1
    For Each Rw In Tbl.Rows
    TrgCol = 1
        For Each Cel In Rw.Cells
        ThisWorkbook.Sheets("nse").Cells(TrgRw, TrgCol).Value = Cel.innerText
        TrgCol = TrgCol + Cel.colSpan   ' if Column span is > 1 multiple
        Next Cel
    TrgRw = TrgRw + 1
    Next Rw
End Sub

答案 1 :(得分:0)

关于内部服务器错误,我遇到了与@AhmedAU相同的问题。

如果解决了,请考虑使用Web工具中的内置数据。工具>数据>来自网络>将网址添加到包含您的符号的地址栏,例如

https://nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=ACC&date=25APR2019

按GO。请稍等片刻,然后选择要导入的表。该表将被导入Excel。

在早期版本的Excel中,您可能需要从Microsoft下载免费的powerquery加载项,然后使用Powerquery选项卡执行相同的任务。