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


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

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

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


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

以下是引用18523982317在2017/11/6 17:21: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 mc = web.Document.GetElementByID("txt_mc")
mc.setattribute("value", "重庆建工住宅建设有限公司")

 

Dim cx = web.Document.GetElementByID("btn_c")
cx.InvokeMember("click")

 


'msgbox(2)
'output.show(web.documenttext)


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


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

不行啊    查询不起作用,得到的数据还是13条 不是查询的那个公司

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/7 8:58: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 mc = web.Document.GetElementByID("txt_mc")
mc.setattribute("value", "重庆建工住宅建设有限公司")

Dim temp As String = web.documenttext
Dim cx = web.Document.GetElementByID("btn_c")
cx.InvokeMember("click")

Do Until web.ReadyState = 4 AndAlso temp <> web.documentText
    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
  14楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

真不会测试,麻烦甜大大了。。。

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


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

html正在学,还没接触到你写的代码这种深度,目前只会编编新闻和css

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


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

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

说实话 我没看懂7楼下半部分模拟点击下一页的代码,这段代码里的Ok是什么作用?
代码里面刚刚定义了ok = false   下面马上用ok作为判断,ok的值不论在下面的判断中赋值成true还是false 都没有意义啊。。。没看懂。。。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/7 10:22: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 temp = web.documentText
    Do Until web.ReadyState = 4 AndAlso temp <> web.documentText
        Application.DoEvents
    Loop

Next


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


加好友 发短信
等级:童狐 帖子:234 积分:2062 威望:0 精华:0 注册:2015/11/7 21:11:00
  发帖心情 Post By:2019/3/6 23:08:00 [只看该作者]

Mark

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