程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了从网络上抓取类别信息以获得 excel 列表大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决从网络上抓取类别信息以获得 excel 列表?

开发过程中遇到从网络上抓取类别信息以获得 excel 列表的问题如何解决?下面主要结合日常开发的经验,给出你关于从网络上抓取类别信息以获得 excel 列表的解决方法建议,希望对你解决从网络上抓取类别信息以获得 excel 列表有所启发或帮助;

我对 HTML 的网页抓取完全陌生。我需要在一个固定的网站上搜索 part#(在 Excel 表格的 A 列中)(在浏览了几个教程后我能够找到直接查询链接),然后记下该网站的完整类别路径页到 B 列对应的单元格。

例如,我在 Excel 表格 A 列中从 A2 到 A500 总共有 500 个零件#,并且我希望在 B2 到 B500 中抓取所需的 Web 信息。

从网络上抓取类别信息以获得 excel 列表

打开页面后,我需要抓取的信息位于页面的 HTML 源代码中,如下所示。我需要的信息是:browse/Fasteners/Pins-Clips-Retaining-Rings/Pins-Clips/Quick-Release-Pins-AccessorIEs/Quick-Release-Pins

从网络上抓取类别信息以获得 excel 列表

VBA 需要从单元格 A2 中提取 MFG# 并将其作为输入传递给 VBA 以打开链接 https://www.mscdirect.com/browse/?searchterm=XXXX 这里的 XXXX 是来自 A2 的 MFG#。 页面加载后,路径需要被抓取并保存到 B 列单元格。这需要重复,直到所有包含 A 列数据的单元格都被刮掉。

有时这个直接搜索查询链接可能会给出多个结果或根本没有结果,因此我们要寻找的元素不会存在。在这种情况下,我希望 VBA 返回诸如“未找到”或“多个结果”或任何此类消息之类的信息。

我也知道有一种方法可以不用打开浏览器,把要抓取的信息单独保存在外面,然后传到excel表上。这将在整个操作中节省大量时间。如果有人能提供帮助,我将不胜感激。

这是我从帖子中获取的代码,我能够在 IE 中打开该页面并搜索 part# 并且没有其他内容。因为我是新人,所以我真的没有太多线索。

Sub GetClassnames()

'dimension (declare or set asIDe memory for) our variables
Dim HTML As HTMLdocument

Dim objIE As Object

Dim y As Integer 'Integer variable we'll use as a counter

Dim result As String 'String variable that will hold our result link

'initiaTing a new instance of Internet Explorer and asigning it to objIE
Set objIE = New InternetExplorer

'make IE browser visible (false would allow IE to run in the BACkground)
objIE.Visible = True

'navigate IE to this web page (a pretty neat search ENGIne really)
objIE.navigate "https://www.mscdirect.com/browse/?searchterm=" & Range("A2").Text

'wait here a few seconds while the browser is busy
do while objIE.busy = True Or objIE.readyState <> 4: DoEvents: Loop


Set HTML = objIE.document

Set elements = HTMl.getElementsByClassname("section")

For Each element In elements
    If element.classname = "section" Then
        Sheets("Sheet1").Range("B" & y).Value = element.innerText
        y = y + 1
    End If

Next element

End Sub

更新: 好的,所以我能够对其进行编码,并且它与错误处理程序一起按要求工作。然而,我现在面临的问题是,在宏运行 50 或 60 行后,Internet Explorer 崩溃关闭,然后宏用错误处理程序语句“未找到”填充 B 列中的所有剩余行 有没有办法解决这个问题?我希望我们可以消除对 Internet Explorer 的依赖,并以某种方式对其进行编码,以便从 IE 中提取 HTML。我阅读了很多建议这样做的文章,但无法完成。如果有人可以提供帮助,我将不胜感激。 我已经尝试过以下故障排除:

  1. 我已将页面加载状态设置为完成,但没有任何区别,7 秒对于此页面来说已经足够了。
  2. 我已尝试将 IR 可见性设置为 false,但仍然崩溃

下面是我正在使用的新代码

enter code here

Sub MSC_Working()

    On Error GoTo ErrHandler

    Dim IE As New InternetExplorer
    Dim Doc As HTMLdocument
    Dim lastRow As Long,i As Long
    Dim sDD As String
    Dim CurrentTime As Date
    Dim EndingTime As Date
    

    IE.Visible = True 'IE window will be visible

    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    For i = 1 To lastRow

        IE.navigate ("https://www.mscdirect.com/browse/?searchterm=" & Cells(i,1).value)

        CurrentTime = Now
        EndingTime = Now + TimeValue("00:00:07") '7 secs delay to allow laoding the page
        Do Until CurrentTime >= EndingTime
        DoEvents
        CurrentTime = Now()
        Loop

        Set Doc = IE.document

        sDD = Doc.getElementByID("breadcrumbval").innerText 'Elelment ID for required data
        Cells(i,2) = sDD
            
NextRow:
    Next


     Set IE = nothing
     Set Doc = nothing
     
     Exit Sub
     
ErrHandler: 'action to take by error handler when the breadcrumbval element is not found on the page
    Err.Clear
    Cells(i,2) = "Not found"
    Resume NextRow
    
End Sub

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的从网络上抓取类别信息以获得 excel 列表全部内容,希望文章能够帮你解决从网络上抓取类别信息以获得 excel 列表所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:excel列表