我用vba抓取一些网站以获得乐趣,我使用VBA作为工具.我使用XMLHTTP和HTMLDocument(因为它比internetExplorer.Application更快).
Public Sub XMLhtmlDocumentHTMLSourceScraper() Dim XMLHTTPReq As Object Dim htmlDoc As HTMLDocument Dim postURL As String postURL = "http://foodffs.tumblr.com/archive/2015/11" Set XMLHTTPReq = New MSXML2.XMLHTTP With XMLHTTPReq .Open "GET", postURL, False .Send End With Set htmlDoc = New HTMLDocument With htmlDoc .body.innerHTML = XMLHTTPReq.responseText End With i = 0 Set varTemp = htmlDoc.getElementsByClassName("post_glass post_micro_glass") For Each vr In varTemp ''''the next line is important to solve this issue *1 Cells(1, 1) = vr.outerHTML Set varTemp2 = vr.getElementsByTagName("SPAN class=post_date") Cells(i + 1, 3) = varTemp2.Item(0).innerText ''''the next line occur 438Error'''' Set varTemp2 = vr.getElementsByClassName("hover_inner") Cells(i + 1, 4) = varTemp2.innerText i = i + 1 Next vr End Sub
我通过*1单元格(1,1)向我展示了下一个问题
...............是的所有班级标签丢失了"".只有第一个函数的类有""我真的不知道为什么会出现这种情况.
//我可以通过getElementsByTagName("span")进行解析.但我更喜欢"上课"标签.....
1> 小智..:该getElementsByClassName方法方法不被认为是其自身的方法; 仅限父HTMLDocument.如果要使用它来定位DIV元素中的元素,则需要创建由该特定DIV元素的.outerHtml组成的子HTMLDocument.
Public Sub XMLhtmlDocumentHTMLSourceScraper() Dim xmlHTTPReq As New MSXML2.XMLHTTP Dim htmlDOC As New HTMLDocument, divSUBDOC As New HTMLDocument Dim iDIV As Long, iSPN As Long, iEL As Long Dim postURL As String, nr As Long, i As Long postURL = "http://foodffs.tumblr.com/archive/2015/11" With xmlHTTPReq .Open "GET", postURL, False .Send End With 'Set htmlDOC = New HTMLDocument With htmlDOC .body.innerHTML = xmlHTTPReq.responseText End With i = 0 With htmlDOC For iDIV = 0 To .getElementsByClassName("post_glass post_micro_glass").Length - 1 nr = Sheet1.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row With .getElementsByClassName("post_glass post_micro_glass")(iDIV) 'method 1 - run through multiples in a collection For iSPN = 0 To .getElementsByTagName("span").Length - 1 With .getElementsByTagName("span")(iSPN) Select Case LCase(.className) Case "post_date" Cells(nr, 3) = .innerText Case "post_notes" Cells(nr, 4) = .innerText Case Else 'do nothing End Select End With Next iSPN 'method 2 - create a sub-HTML doc to facilitate getting els by classname divSUBDOC.body.innerHTML = .outerHTML 'only the HTML from this DIV With divSUBDOC If CBool(.getElementsByClassName("hover_inner").Length) Then 'there is at least 1 'use the first Cells(nr, 5) = .getElementsByClassName("hover_inner")(0).innerText End If End With End With Next iDIV End With End Sub虽然其他.getElementsByXXXX可以很容易地检索另一个元素中的集合,但getElementsByClassName方法需要考虑它认为整个HTMLDocument的内容,即使你已经愚弄了它.
推荐阅读
如何解决《pythonpandas-应用具有两个列参数的函数》经验,为你挑选了2个好方法。 ... [详细] 如何解决《位置:固定,底部:0似乎不适用于离子应用程序》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何告诉scikit-learn给出F-1/精度/召回分数的标签(二进制分类)?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Azure共享计划上的SSL?》经验,为你挑选了2个好方法。 ... [详细] 如何解决《如何防止Onchange在页面加载时触发》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何获取状态栏背景颜色以显示colorPrimaryDark》经验,为你挑选了1个好方法。 ... [详细] 如何解决《添加新源数据时,ViewPagerAndroid返回空视图》经验,为你挑选了0个好方法。 ... [详细] 如何解决《将8个字符从内存加载到__m256变量中作为压缩单精度浮点数》经验,为你挑选了1个好方法。 ... [详细] 如何解决《Div不知道屏幕大小调整》经验,为你挑选了0个好方法。 ... [详细] 如何解决《不能欺骗sudo;报告说有效的uid是非零的》经验,为你挑选了1个好方法。 ... [详细] 如何解决《命令行"java-version"会将结果发送到stdOut或stdErr吗?》经验,为你挑选了0个好方法。 ... [详细] 如何解决《100位浮点蟒蛇》经验,为你挑选了1个好方法。 ... [详细] 如何解决《即使双击按钮,VoiceOver也会读取标签》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在主机名中的'-'后提取4个字符》经验,为你挑选了2个好方法。 ... [详细] 如何解决《PythonRSA加密》经验,为你挑选了1个好方法。 ... [详细] 如何解决《当printf10colums和10行时,如何获取所有数组编号?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《如何在browserify中使用exclude?》经验,为你挑选了1个好方法。 ... [详细] 如何解决《多个变量Javascriptmap()回调》经验,为你挑选了1个好方法。 ... [详细] 吐了个 "CAO" !Tags | 热门标签RankList | 热门文章
- 1如何在包中的文件中使用全局var?
- 2条形码128 - 3位字符串条形码宽度大于4位数字符串条形码
- 3Android switchcompat禁用文本单击
- 4如何在STS中使用Apache Tomcat 8(Spring Tool Suite最新版本)?
- 5使用SymPy将符号表达式转换为Python函数
- 6如何在materilize CSS中控制自动打开的Datepicker?
- 7SIP代理和SIP出站代理之间的区别
- 8C#创建Excel工作表后期绑定
- 9在android studio中有没有一种方法来禁用模块而不删除它?
- 10打开jenkins.war时出错
- 11网站如何知道他们不是默认的主页或搜索提供商?
- 12ios-deploy无法在Mac OS X El Capitan 10.11上安装
- 13我们能否从他们的限制中推断出两个阶级的关系?
- 14Ext.MessageBox.confirm自定义按钮
- 15如何在没有调用onCreate()的情况下返回First活动
- 16Mongo中findOne和find_one有什么区别?
- 17当提交足够的任务时,修复了线程池线程阻塞
- 18如何在pyspark中找到两个rdd的交叉点?
- 19为什么以下函数不是尾递归?
- 20是否有适用于AWS Lambda的模拟器?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有