Foxtable(狐表)用户栏目专家坐堂 → [求助]求高手帮我写个抓取网页数据的代码


  共有4774人关注过本帖树形打印复制链接

主题:[求助]求高手帮我写个抓取网页数据的代码

帅哥哟,离线,有人找我吗?
18523982317
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
[求助]求高手帮我写个抓取网页数据的代码  发帖心情 Post By:2017/11/6 13:42:00 [只看该作者]

http://cx.cqjsxx.com:8010/CX_SGQYMRPM2.aspx
重庆企业诚信分的网页,求高手帮我写个抓取网页的数据的代码

1、我想建立一张表,表里有企业名称和查询的时间,我希望我能循环抓取表里所有企业在某天的诚信分


求高手帮我写个抓取网页数据的代码,论坛的帖子研究半天没研究出来。。。。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/6 14:30:00 [只看该作者]

参考代码

 

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate("http://cx.cqjsxx.com:8010/CX_SGQYMRPM2.aspx")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim elems As object = web.Document.GetElementById("GV_SGPM").GetElementsByTagName("tr")
For Each elem As object In elems
    Dim tdelems As object =  elem.GetElementsByTagName("td")
    If tdelems.count >= 10 Then
        output.show(tdelems(0).innertext & "  " & tdelems(1).innertext & "  " & tdelems(2).innertext)
    End If
Next

 


   


 回到顶部
帅哥哟,离线,有人找我吗?
18523982317
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2017/11/6 14:41:00 [只看该作者]

没任何反映。。。。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/6 14:44:00 [只看该作者]

1、看懂代码;

 

2、请去测试窗口调试 http://www.foxtable.com/webhelp/scr/0213.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
18523982317
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2017/11/6 14:49:00 [只看该作者]

可以了。。。没看到是output.show....

 回到顶部
帅哥哟,离线,有人找我吗?
18523982317
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2017/11/6 15:45:00 [只看该作者]

甜大大 麻烦帮忙在写下  如何自动模拟下一页 再读取数据
我参考论坛里的
Dim web = Forms("窗口1").controls("webbrowser1").basecontrol
Dim count = web.Document.GetElementById("planContent").GetElementsByTagName("span")(0).InnerText
msgbox(count)
For k As Integer = 1 To Math.Ceiling(count / 10)
    Dim tb = web.Document.GetElementById("tableContent")
    Dim trs = tb.GetElementsByTagName("tr")   '根据标签得到数据集合
    For i As Integer = 1 To trs.count-1
        output.show(trs(i).InnerText)
        Dim tds = trs(i).GetElementsByTagName("td")
        For j As Integer = 0 To tds.count-1
            output.show(tds(j).InnerText)
        Next
    Next
    Do Until web.Document.GetElementById("mypagination1") IsNot Nothing
        Application.DoEvents
    Loop
    Dim pgs = web.Document.GetElementById("mypagination1")
    For Each pg As object In pgs.GetElementsByTagName("a")
        If pg.InnerText = "下一页" Then
            pg.InvokeMember("click")
            Exit For
        End If
    Next
Next

一个是count代表什么  没猜明白,二是下一页所在的区域没有id。。。就不知道怎么去获取下一页再模拟单击了。。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/6 16:18:00 [只看该作者]

参考代码

 

Dim web As New System.Windows.Forms.WebBrowser()
web.Navigate("http://cx.cqjsxx.com:8010/CX_SGQYMRPM2.aspx")
Do Until web.ReadyState = 4
    Application.DoEvents
Loop

Dim pg As Integer = 0
Dim cp As Integer = 0
For Each sp As object In web.Document.GetElementsByTagName("span")
    If sp.id IsNot Nothing
        If sp.id.contains("LabelPageCount") Then
            pg = sp.InnerText.split(" ")(1)
        ElseIf sp.id.contains("LabelCurrentPage") Then
            cp = sp.InnerText.split(" ")(1)
        End If
    End If
Next
msgbox(pg & " " & cp)
For i As Integer = cp To pg-1
    Dim elems As object = web.Document.GetElementById("GV_SGPM").GetElementsByTagName("tr")
    For Each elem As object In elems
        Dim tdelems As object =  elem.GetElementsByTagName("td")
        If tdelems.count >= 10 Then
            output.show(tdelems(0).innertext & "  " & tdelems(1).innertext & "  " & tdelems(2).innertext)
        End If
    Next
   
    '调试
    If i = 3 Then '第三页后退出
        Exit For
    End If

   
    Dim btn = web.Document.GetElementById("GV_SGPM_ctl16_LinkButtonNextPage")
    btn.InvokeMember("click")
   
    Dim ok As Boolean = False
    Do Until web.ReadyState = 4 AndAlso ok
        Application.DoEvents
        For Each sp As object In web.Document.GetElementsByTagName("span")
            If sp.id IsNot Nothing
                If sp.id.contains("LabelCurrentPage") Then
                    If sp.InnerText.split(" ")(1) <> i Then
                        ok = True
                        Exit For
                    Else
                        Application.DoEvents
                        Exit For
                    End If
                End If
            End If
        Next
    Loop
Next


 回到顶部
帅哥哟,离线,有人找我吗?
18523982317
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2017/11/6 16:30:00 [只看该作者]

大概读懂了,我想用dim str as string = web.Document.GetElementsByTagName("GV_SGPM_ctl15_LabelRecordCount").innerHTML 去获取3847这个数据,结果不支持innerHTML

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/6 16:46:00 [只看该作者]

你要用这种方式获取

 

For Each sp As object In web.Document.GetElementsByTagName("span")
    If sp.id IsNot Nothing
        If sp.id.contains("LabelPageCount") Then
            pg = sp.InnerText.split(" ")(1)
        ElseIf sp.id.contains("LabelCurrentPage") Then
            cp = sp.InnerText.split(" ")(1)

        ElseIf sp.id.contains("LabelRecordCount") Then
            msgbox(sp.InnerText)
        End If
    End If
Next


 回到顶部
帅哥哟,离线,有人找我吗?
18523982317
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:四尾狐 帖子:857 积分:6156 威望:0 精华:0 注册:2015/12/24 13:02:00
  发帖心情 Post By:2017/11/6 17:21:00 [只看该作者]

甜大大   我又有个需求,我要在企业名称的文本框里自动填入当前行的企业名称进去,然后查询,然后下载数据到本地

这个向网页填写数据,改怎么做


 回到顶部
总数 18 1 2 下一页