vba xmlhttp 抓取网页(:-日报第2期)
优采云 发布时间: 2022-01-22 22:10vba xmlhttp 抓取网页(:-日报第2期)
子测试()
暗淡 strRespText$、school$、province&、preUrl$
昏暗的网址
school = ThisWorkbook.Sheets(1).Cells(2, 2) '读学校名
eprovince = ThisWorkbook.Sheets(1).Cells(2, 3) '省读
preUrl = ThisWorkbook.Sheets(1).Cells(2, 4) '网址读取
使用 CreateObject("InternetExplorer.Application") '调用互联网
.可见=真
.navigate preUrl
直到 .readystate = 4
做事件
环形
设置 dmt = .document
dmt.all.tags("select")(10).Value = "山东"
dmt.all.tags("输入")(8).Value = 学校
dmt.all.tags("输入")(9).Click
直到 .readystate = 4
做事件
环形
t = dmt.all.tags("a")(129)
ThisWorkbook.Sheets(2).Cells(1, 1) = t
结束于
with CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '得到的字符串放入剪贴板,记事本观察数据
.SetText tt '数据正常显示,可以提取
.PutInClipboard
结束于
结束子
-------------------------------------------------- -------------------------------------------------- --------分割线---------------------------------------- -------------------------------------------------- ---------- 我的目标:将2008-2012年山东各学校和专业B栏(最低分、最高分、平均分)的招生情况记录到各自的工作表中去。
*敏*感*词*和想法:
首先我去指定的网站()看看。查询该校各专业的招生情况,需要经过条件搜索,点击三下链接,才能到达最终结果页面,(... t_2012_shandong .htm)。我分析了这个结果页面,发现schoolpoint之后的参数都可以修改得到对应的结果。我现在需要找到的是参数/539/,它是来自学校对这个网站 ID 编码的。
然后,我回过头去看了一路跳过的网页的源代码。在第一次搜索的结果网页中,有一个“A”,其NameProp值为school539.htm,其对应的文字正是搜索结果中的学校名称。也就是说,如果我找到这个NameProp,我就可以得到学校的id。
接下来,我去初始页面()寻找进入搜索结果页面的方法。
第一阶段,通过合成 urL? 输入字段后,但是输入后,搜索框是乱码,结果是默认的“北大”,无法合成。
第二阶段,尝试搜索后,发现重定向结果页的UrL不是明码。我尝试将搜索字段转码为UTF-8并再次合成搜索结果页面的URL,但还是不行。仔细对比后发现,系统的地址和我上一段合成的一模一样,只是最后多了一个“&x=3&y=22”之类的字段。在同一个搜索字段中反复试验,发现x和y都是随机的。是的,我猜是防盗链(其实我也不知道防盗链是什么)。因为无法获取正确的地址,所以决定放弃XmlHttp,改用IE。
第三阶段,IE尝试进入搜索结果页正常,但是结果页完成后,读取新页面的目标数据,发现上一页的值还是上一页的值. 方法清除缓存,但结果还是不行,还是上一页的值。所以很郁闷,卡在这里。
以下是添加清除缓存功能后的代码,因为DeleteUrlCacheEntry功能不是很懂,请大家指导。
子测试()
暗淡 strRespText$、school$、province&、preUrl$
昏暗的网址
school = ThisWorkbook.Sheets(1).Cells(2, 2) '读学校名
eprovince = ThisWorkbook.Sheets(1).Cells(2, 3) '省读
preUrl = ThisWorkbook.Sheets(1).Cells(2, 4) '读
使用 CreateObject("internetExplorer.Application")
.可见=真
.导航 preUrl
直到 .readystate = 4
做事件
环形
设置 dmt = .document
s = dmt.all.tags("a")(129)
dmt.all.tags("select")(10).Value = eprovince
dmt.all.tags("输入")(8).Value = 学校
dmt.all.tags("输入")(9).Click
DeleteUrlCacheEntry dmt.all '清除缓存
直到 .readystate = 4
做事件
环形
t = dmt.all.tags("a")(129)
ThisWorkbook.Sheets(2).Cells(1, 2) = t
ThisWorkbook.Sheets(2).Cells(1, 1) = s
结束于
with CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") '得到的字符串放入剪贴板,记事本观察数据
.SetText tt '数据正常显示,可以提取
.PutInClipboard
结束于
结束子
此帖已经同步到谁道天涯-江波的微博