VBA XMLHTTP 获取网页信息数据不全

u012819276 2013-11-13 03:15:17
目标:每天向下一行叠加添加网站SEO数据

方法:采用VBA MSXML2.XMLHTTP.3.0

遇到的难题:但是在第一步获取网页信息上就出了问题,表现为获取网页信息不全

详细:

看了各位大神的代码,自己编了一段,获取站长工具chinaz的网站SEO数据,和百度SITE网站收录数据

但是获取到的responseText
CHINAZ信息不全(收录首页信息等没有)
BAIDU只能截取前面的一部分代码,这是不是和百度分包发送有关,那应该怎么解决?

CHINAZ
原网页:



获取出来responseText直接复制成HTM文件后是这样的(缺少信息):





BAIDU
原网页:




获取出来responseText直接复制成HTM文件后是这样的




最后是VBA代码:
Sub getSingleSeoData() '获取网页数据
'获取网页数据-chinaz
Dim HTTPREQ As Object
Set HTTPREQ = CreateObject("MSXML2.XMLHTTP.3.0")
HTTPREQ.Open "GET", "http://seo.chinaz.com/?q=bbs.csdn.net", False
HTTPREQ.Send
Do Until HTTPREQ.ReadyState = 4
DoEvents
Loop
Cells(1, 1).Value = HTTPREQ.responseText


'获取网页数据-baidu
HTTPREQ.Open "GET", "http://www.baidu.com/s?wd=site%3Abbs.csdn.net", False
HTTPREQ.Send
Cells(1, 2).Value = HTTPREQ.responseText

Set HTTPREQ = Nothing

End Sub



希望大神能帮我解决一下chinaz获取信息不全,BAIDU只能获取部分信息的问题
求一份高可用、高健壮,有注释的简介代码

四种网页获取方法都试过没用
然后QueryTables.Add方法可以获取到baidu的所有信息,但是china该丢失还是丢失


附上QueryTables.Add的录制宏代码:
Sub 宏1()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.baidu.com/s?wd=site%3Axadsyy.com&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=8&rsv_sug=0&rsv_sug4=281&rsv_sug1=5&inputT=9313" _
, Destination:=Range("$B$1"))
.Name = _
"s?wd=site%3Axadsyy.com&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=8&rsv_sug=0&rsv_sug4=281&rsv_sug1=5&inputT=9313"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub



但是如果用QueryTables肯定很麻烦,因为Destination是Range类型,还是必要参数
到时候提取收录之后还要清空单元格信息

另外如果是想知道百度首页是不是第一,这个判断貌似也比较复杂。

希望大神解决以上几个问题,真心感谢了!
...全文
1060 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodsheep008 2013-11-20
  • 打赏
  • 举报
回复
关注我一下,互换一下QQ号
goodsheep008 2013-11-20
  • 打赏
  • 举报
回复
你也在做VBA SEO数据采集? 咱们同路。
u012819276 2013-11-15
  • 打赏
  • 举报
回复
不对少了一个新收录数量,所以最终结果是这样的:
u012819276 2013-11-15
  • 打赏
  • 举报
回复
帖子分最大数了,不然我还想给亲加分,

如果是一个新站点,可能百度的页面和chinaz会显示未找到,比如:http://www.baidu.com/s?wd=site%3Anopages111111.com
http://seo.chinaz.com/?q=nopages111111.com

就是这些边界条件可能还要判断一下,最终的结果是要达到这样的,请大神过目:


其中快照隔天指的是昨天,比如今天2013-11-15,隔天就是2013-11-14
而-3就是隔天减去三天就是2013-11-11

首页1就是在第一个,首页3就是在第二个,首页0就是第一页没有首页

再次谢谢大神了!
u012819276 2013-11-15
  • 打赏
  • 举报
回复
亲,你也关注我一下,这样我才可以发私信

再问一下CreateObject("htmlfile")这个都有哪些函数可以进行HTMLFILE处理,发个网址就行,我该怎么用呢,我现在要从tool.chinaz.com上获取流量,关键词数量,BR,PR,信息(其他信息貌似chinaz是用JS动态获取的,所以貌似他的HTMLFILE看不到,只能用百度),

然后再百度上获取百度首页(http://www.baidu.com/s?wd=site%3Abbs.csdn.net)、快照(http://www.baidu.com/s?wd=http://bbs.csdn.net)、反链(http://www.baidu.com/s?wd=domain%3Abbs.csdn.net),

今日收录新文章数量(http://www.baidu.com/s?q1=site%3Abbs.csdn.net&q2=&q3=&q4=&rn=100&lm=1&ct=0&ft=&q5=&q6=&tn=baiduadv)
-方法:只要数出当前页码有多少快照是“2013-11-14”的就行:


求代码,麻烦的话方法也行,真心谢谢了~
蓝天630902 2013-11-14
  • 打赏
  • 举报
回复
这个X呢?


Sub getSingleSeoData()
    Dim HTTPREQ As Object
    Set oDoc = CreateObject("htmlfile")
    Set HTTPREQ = CreateObject("MSXML2.XMLHTTP.3.0")
    HTTPREQ.Open "GET", "http://www.baidu.com/s?wd=site%3Abbs.csdn.net", False
    HTTPREQ.Send
    oDoc.body.innerHTML = HTTPREQ.responseText
    Cells(1, 2).Value = Split(Split(oDoc.All.tags("p")(0).innertext, "个")(0), "数")(1)
    Set HTTPREQ = Nothing
End Sub

u012819276 2013-11-14
  • 打赏
  • 举报
回复
顺便问下,我怎么得到这里面的百度快照信息、首页信息等SEO信息呢?还有百度那里面应该如何得到找到相关结果数X个,这个X呢?
u012819276 2013-11-14
  • 打赏
  • 举报
回复
二楼的意思是,我用字符串去操作还是可以的对吧,那为什么截取tool.chinaz.com的时候,他反馈的信息不全呢(不是截断)
蓝天630902 2013-11-13
  • 打赏
  • 举报
回复
MsgBox Debug.Print Cells 都是有长度限制的,超长就会被截断,所以你觉得“获取信息不全

Sub getSingleSeoData()    '获取网页数据
'获取网页数据-chinaz
    Dim HTTPREQ As Object
    Set oDoc = CreateObject("htmlfile")
    Set HTTPREQ = CreateObject("MSXML2.XMLHTTP.3.0")
    HTTPREQ.Open "GET", "http://seo.chinaz.com/?q=bbs.csdn.net", False
    HTTPREQ.Send
    Do Until HTTPREQ.ReadyState = 4
        DoEvents
    Loop
    oDoc.body.innerHTML = HTTPREQ.responseText
    Cells(1, 1).Value = oDoc.body.innertext

    '获取网页数据-baidu
    HTTPREQ.Open "GET", "http://www.baidu.com/s?wd=site%3Abbs.csdn.net", False
    HTTPREQ.Send
    oDoc.body.innerHTML = HTTPREQ.responseText
    Cells(1, 2).Value = oDoc.body.innertext
    Set HTTPREQ = Nothing
End Sub

1,502

社区成员

发帖
与我相关
我的任务
社区描述
VB 网络编程
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧