大佬教程收集整理的这篇文章主要介绍了从网络上抓取类别信息以获得 excel 列表,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我对 HTML 的网页抓取完全陌生。我需要在一个固定的网站上搜索 part#(在 Excel 表格的 A 列中)(在浏览了几个教程后我能够找到直接查询链接),然后记下该网站的完整类别路径页到 B 列对应的单元格。
例如,我在 Excel 表格 A 列中从 A2 到 A500 总共有 500 个零件#,并且我希望在 B2 到 B500 中抓取所需的 Web 信息。
打开页面后,我需要抓取的信息位于页面的 HTML 源代码中,如下所示。我需要的信息是:browse/Fasteners/Pins-Clips-Retaining-Rings/Pins-Clips/Quick-Release-Pins-AccessorIEs/Quick-Release-Pins
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。我阅读了很多建议这样做的文章,但无法完成。如果有人可以提供帮助,我将不胜感激。 我已经尝试过以下故障排除:
下面是我正在使用的新代码
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,请注明来意。