Excel 使用VBA和IE解析internet HTML页面中的数据

Excel 使用VBA和IE解析internet HTML页面中的数据,excel,vba,web-scraping,Excel,Vba,Web Scraping,Diclosure:我只是一名办公室职员,对VBA和HTML非常陌生。希望你对我有耐心。我非常感谢任何指导和帮助。希望我的格式正确 我昨天花了一整天的时间试图从内部网网页导入信息,以自动进行路由复制和粘贴。从长远来看,这确实会有帮助 因为power query似乎看不到我需要的表,所以我认为唯一的选择是使用VBA。MsServer工具完美地抓取了页面,但令我失望的是页面出现了错误,因为它需要先授权才能访问它 我认为使用IE应该可以,因为IE在cookies中有登录信息 这就是我到目前为止所得到的

Diclosure:我只是一名办公室职员,对VBA和HTML非常陌生。希望你对我有耐心。我非常感谢任何指导和帮助。希望我的格式正确

我昨天花了一整天的时间试图从内部网网页导入信息,以自动进行路由复制和粘贴。从长远来看,这确实会有帮助

因为power query似乎看不到我需要的表,所以我认为唯一的选择是使用VBA。MsServer工具完美地抓取了页面,但令我失望的是页面出现了错误,因为它需要先授权才能访问它

我认为使用IE应该可以,因为IE在cookies中有登录信息

这就是我到目前为止所得到的

 Sub ExtractFromEndeca() Dim ie As InternetExplorer Dim html As
 IHTMLDocument Set ie = CreateObject("InternetExplorer.Application")
 ie.Visible = False 
 ie.Navigate "intranet address"
 While ie.Busy
     DoEvents Wend While ie.ReadyState < 4
     DoEvents Wend
     Set Doc = CreateObject("htmlfile")
     Set Doc = ie.document
     Set Data = Doc.getElementById("findSimilarOptions2")
     Sheet1.Cells(1, 1) = Data
     ie.Quit Set ie = Nothing

 ThisWorkbook.Sheets(1).Cells(1, 1) = Data

 End Sub
Sub-ExtractFromEndeca()Dim ie作为InternetExplorer Dim html作为
IHTMLDocument集ie=CreateObject(“InternetExplorer.Application”)
可见=假
即,导航“内部网地址”
趁我忙
当ie.ReadyState<4时,事件不会发生
多文特
Set Doc=CreateObject(“htmlfile”)
Set Doc=ie.document
Set Data=Doc.getElementById(“findSimilarOptions2”)
表1.单元格(1,1)=数据
退出设置
ThisWorkbook.Sheets(1).单元格(1,1)=数据
端接头
结果是A1单元格中的[object],就是这样,我不知道我是否通过了登录

这是我试图抓住的一个页面片段。理想情况下,该数据将作为表格输出

   <td valign="top" id="findSimilarOptions2">
<div class="subtitle">Part Attributes</div>
    <input type="checkbox" id="n_200012" value="-19192896" NAME="n_200012">
    <b>
    ASSY TYPE</b>&nbsp;>
    Component<br>

    <input type="checkbox" id="n_200013" value="-18148519" NAME="n_200013">
    <b>
    PARAMETER I NEED(1)</b>&nbsp;>
    VALUE I NEED(1)<br>

    <input type="checkbox" id="n_200006" value="-20823731" NAME="n_200006">
    <b>
    PARAMETER I NEED(2)</b>&nbsp;>
    VALUE I NEED(2)<br>

    <input type="checkbox" id="n_200006" value="-20823618" NAME="n_200006">
    <b>
    PARAMETER I NEED(3)</b>&nbsp;>
    VALUE I NEED(3)<br>

    <input type="checkbox" id="n_200006" value="-20823586" NAME="n_200006">
    <b>
    PARAMETER I NEED(4)</b>&nbsp;>
    VALUE I NEED(4)<br>
    ...

零件属性
组件类型>
组件
我需要的参数(1)> 我需要的值(1)
我需要的参数(2)> 我需要的值(2)
我需要的参数(3)> 我需要的值(3)
我需要的参数(4)> 我需要的值(4)
...
请阅读以下代码中的我的评论:

'Use the following line in every module head
'It forces you to define all variables
Option Explicit

Sub ExtractFromEndeca()

Dim ie As InternetExplorer
Dim doc As IHTMLDocument 'You don't use html in your code, but doc
Dim data As HTMLHtmlElement 'You should define all variables
Dim singleData As HTMLHtmlElement 'New variable
Dim row As Long 'New variable

  row = 1 'First row for output in Excel table

  'Set ie = CreateObject("InternetExplorer.Application") 'This could be problematic on the intranet due to security guidelines
  Set ie = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") 'Try this instead to initialize the IE
  ie.Visible = True 'This property should be True while development
  ie.Navigate "intranet address"
  'While ie.Busy: DoEvents: Wend 'You don't need this line
  While ie.ReadyState <> 4: DoEvents: Wend
  'Set Doc = CreateObject("htmlfile") 'You don't need this line
  Set doc = ie.document
  Set data = doc.getElementById("findSimilarOptions2").getElementsByTagName("input")

  'Data is only a reference to an object
  'You want the text information which lies in the value attributes of each input tag
  For Each singleData In data
    Sheet1.Cells(row, 1) = data.Value
    row = row + 1
  Next singleData

  'Clean up
  '(Automatic after development has finished)
  'ie.Quit
  'Set ie = Nothing
End Sub
“在每个模块头中使用以下行
'它强制您定义所有变量
选项显式
Sub-ExtractFromEndeca()
Dim ie作为InternetExplorer
Dim doc As IHTMLDocument“您在代码中不使用html,而是使用doc
Dim data As HtmlHtmlement“您应该定义所有变量
Dim singleData作为HTMLHtmlElement的新变量
将行变长为“新变量”
行=1'Excel表格中输出的第一行
“Set ie=CreateObject(“InternetExplorer.Application”)”由于安全准则,这在intranet上可能会有问题
设置ie=GetObject(“新建:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}”)'尝试此操作来初始化ie
ie.Visible=True“开发时,此属性应为True
即,导航“内部网地址”
你不需要这条电话
而ie.ReadyState 4:DoEvents:Wend
'Set Doc=CreateObject(“htmlfile”)'您不需要此行
Set doc=ie.document
Set data=doc.getElementById(“findSimilarOptions2”).getElementsByTagName(“输入”)
'数据只是对对象的引用
'您需要位于每个输入标记的值属性中的文本信息
对于数据中的每个单个数据
表1.单元格(行,1)=数据值
行=行+1
下一个单一数据
“清理
'(开发完成后自动)
”他说
'设置=无
端接头

欢迎来到SO。如果您使用
Sheet1.Cells(1,1)=Data.Value
而不是
Sheet1.Cells(1,1)=Data
,会发生什么?啊,我想我知道原因<代码>没有任何值,因此无法将其返回到Excel文件。但是,HTML代码的其他元素应该可以工作,例如
。尝试测试
Set Data=Doc.getElementById(“n_200012”)
,然后测试
Sheet1.Cells(1,1)=Data.Value
@JustynaMK是的,它获取值-19192896!非常感谢。但这不是我所需要的。我需要id“findSimilarOptions2”@JustynaMK UPD的内部文本:我刚刚测试过,它用数据抓取了它。innerText!我太激动了,终于有个地方忘了吃午饭了。午餐后,我将尝试结合下面的答案来帮助构建这些数据。再次非常感谢。非常好的消息!很高兴你进展顺利。我很清楚你的感受,但请不要忘记吃饭:-)保重。你好,谢谢。这一点变得非常清楚。它会打开新的IE窗口,但在这一行Set data=doc.getElementById(“findSimilarOptions2”)(0.getElementsByTagName(“输入”)中会产生错误。错误为424:需要对象。这是否意味着它还没有通过登录?@AndreyRassanov对不起,是我的错。getElementByID()不需要(0)来获取节点集合的特定索引元素,因为一个id在html文档中应该只存在一次。这就是使用getElementbyID()时没有节点集合的原因。我编辑了该行。它生成错误“13”。同一行中的类型不匹配。我理解正确了吗,你们想抓住标签?我需要的是这些标签之间的文本。如果我理解正确的话,标记输入是自包含的,并且首先不包括此文本。