以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这种网页数据如何抓取数据  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=122215)

--  作者:ZJZK2018
--  发布时间:2018/7/20 20:49:00
--  这种网页数据如何抓取数据


查了专家坐堂,搞了一天一点思路都没有,还是请教老师,谢谢
网址:http://www.hzctc.cn/OpenBidRecord/Index?id=36177CC9-5F91-473F-84E6-A2EFA35D6DD9&tenderID=969B1A8D-1A57-4A21-864F-A5E98F8288FB&ModuleID=486

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:读取pdf.zip



图片点击可在新窗口打开查看此主题相关图片如下:8888.png
图片点击可在新窗口打开查看



图片点击可在新窗口打开查看此主题相关图片如下:33333.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2018/7/20 20:50:53编辑过]

--  作者:有点蓝
--  发布时间:2018/7/20 21:21:00
--  
参考:http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=49278

浏览器打开网页,按f12打开开发工具,自己分析网页结构


图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看


--  作者:ZJZK2018
--  发布时间:2018/7/20 21:59:00
--  
下面代码出错,如何调整?谢谢

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate("http://www.hzctc.cn/OpenBidRecord/Index?id=36177CC9-5F91-473F-84E6-A2EFA35D6DD9&tenderID=969B1A8D-1A57-4A21-864F-A5E98F8288FB&ModuleID=486")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

\'取数据
Dim Cols() As String = {"序号","投标企业","总监姓名","总报价","质量标准","中标工期","开标情况备注"}
Dim elems As object = web.Document.GetElementsByTagName("table1")(1).GetElementsByTagName("tr")
Dim m As Integer = 0
For Each elem As object In elems
    Dim i As Integer = -1
    m = m + 1
    If m > 10 Then  \'因为网页的表格有标题,如果不判断,就会增加出一个空行
        Tables("开标标录").AddNew
    End If
    Dim tdelems As object =  elem.GetElementsByTagName("td")
    For Each tdelem As object In tdelems
        i = i + 1
        Tables("开标标录").Current(Cols(i)) = tdelem.Innertext
        \'Tables("开标标录").Current("录入时间") = Date.Now
    Next
Next
Tables("开标标录").save


.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.7.23.1
错误所在事件:窗口,网页数据抓取,Button1,Click
详细错误信息:
“1”的值对于“index”无效。“index”应介于 0 和 -1 之间。
参数名: index


--  作者:有点蓝
--  发布时间:2018/7/20 22:29:00
--  
Dim elems As object = web.Document.GetElementsById("Table1").GetElementsByTagName("tr")
--  作者:ZJZK2018
--  发布时间:2018/7/20 22:39:00
--  
还是不对,你帮我调试一下。


图片点击可在新窗口打开查看此主题相关图片如下:99999924119.png
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:读取pdf.table



[此贴子已经被作者于2018/7/20 22:40:10编辑过]

--  作者:有点蓝
--  发布时间:2018/7/20 22:44:00
--  
Document.getelementbyid


--  作者:ZJZK2018
--  发布时间:2018/7/20 22:52:00
--  
还是错的,能否帮我调试一下,我已上传了实例,谢谢


.NET Framework 版本:2.0.50727.8762
Foxtable 版本:2018.7.23.1
错误所在事件:窗口,网页数据抓取,Button1,Click
详细错误信息:
未将对象引用设置到对象的实例。

--  作者:有点蓝
--  发布时间:2018/7/21 8:53:00
--  
没有时间去帮你们分析网页,自食其力

所有getelementbyid、GetElementsByTagName这些方法返回的对象都先判断一下是否是空值,或者是空数组

dim obj  = Document.getelementbyid("Table1")
if obj isnot nothing then
    dim trs = obj.GetElementsByTagName("tr")
   if trs.length > 0 then
 其它处理
   end if
end if

--  作者:ZJZK2018
--  发布时间:2018/7/22 17:11:00
--  

有点甜老师:

搞了二天还是搞不出来,对网页这方面的知识根本没有,能否帮我写一下,谢谢


--  作者:有点甜
--  发布时间:2018/7/22 19:02:00
--  

参考代码,自己看懂和调整细节

 

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate("http://www.hzctc.cn/OpenBidRecord/Index?id=36177CC9-5F91-473F-84E6-A2EFA35D6DD9&tenderID=969B1A8D-1A57-4A21-864F-A5E98F8288FB&ModuleID=486")
Do Until web.ReadyState = 4 AndAlso web.Document.GetElementById("Table1") IsNot Nothing
    Application.DoEvents
Loop

Dim elems As object = web.Document.GetElementsByTagName("div")
For Each elem As object In elems
    If elem.getattribute("classname") = "row cl" Then
        If elem.InnerText.contains("工程编号") Then
            msgbox(elem.GetElementsByTagName("span")(0).innerText)
        ElseIf elem.InnerText.contains("建设单位") Then
            msgbox(elem.GetElementsByTagName("span")(0).innerText)
        End If
    End If
Next

elems = web.Document.GetElementById("Table1").GetElementsByTagName("tr")
For i As Integer = 1 To elems.count-2
    Dim tds = elems(i).getelementsbytagname("td")
    msgbox(tds(0).InnerText & " " & tds(1).InnerText)
Next