| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4031 人关注过本帖, 3 人收藏
标题:请高手指点一下 如何获取这个网页的数据
只看楼主 加入收藏
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:309
专家分:743
注 册:2021-1-9
收藏
得分:0 
2021-09-04 08:14
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:309
专家分:743
注 册:2021-1-9
收藏
得分:0 
回复 11楼 吹水佬
ALLTRIM(STREXTRACT(tr, [>], [<], 1), 0h20,0h0D,0h0A),;
ALLTRIM(STREXTRACT(tr, [>], [<], 3), 0h20,0h0D,0h0A),;

请教一下吹版  这后面的   0h20,0h0D,0h0A  是什么作用?
指导一下  谢谢
2021-09-04 08:46
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用nbwww在2021-9-4 08:46:51的发言:

ALLTRIM(STREXTRACT(tr, [>], [<], 1), 0h20,0h0D,0h0A),;
ALLTRIM(STREXTRACT(tr, [>], [<], 3), 0h20,0h0D,0h0A),;

请教一下吹版  这后面的   0h20,0h0D,0h0A  是什么作用?
指导一下  谢谢

3种字符:空格、回车、换行
2021-09-04 16:34
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9802
专家分:26906
注 册:2012-2-5
收藏
得分:0 
回复 19楼 吹水佬
多谢吹版,正如楼上所说,这有点高大上了!

坚守VFP最后的阵地
2021-09-04 17:34
nbwww
Rank: 8Rank: 8
等 级:贵宾
威 望:11
帖 子:309
专家分:743
注 册:2021-1-9
收藏
得分:0 
学习了  谢谢
2021-09-04 18:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏(1)
得分:0 
以下是引用sdta在2021-9-4 17:34:14的发言:

多谢吹版,正如楼上所说,这有点高大上了!

“高大上”,吹下水还可以,其实编程没什么高大上,编程就是这样子,重在理解和思路,只求目的,用什么语言都无所谓。
看了一下页面相关的JS代码,涉及到字符串编码解码的问题,有点复杂,要转为VFP代码可能要花点时间。
试了一下取出相关JS代码在VFP中运行来获取COOKIE的值(忽略域名和时间)
程序代码:
DECLARE LONG URLDownloadToFileA IN Urlmon LONG,STRING@,STRING@,LONG,LONG
DECLARE LONG DeleteUrlCacheEntry IN Wininet STRING@
cUrl = "https:///project/buildtablelist/938d3183-00f9-eb11-8e8f-005056b8d0cb"
cookie = GetUrlCookie(cUrl)
IF EMPTY(cookie)
    RETURN 
ENDIF
cTxt = UrlDownload(cUrl, cookie, 1)
nPageCount = VAL(STREXTRACT(cTxt, [page=], [">尾页], OCCURS("page=",cTxt))) 
IF nPageCount == 0
    RETURN
ENDIF
CREATE CURSOR tt (楼栋 C(50),房号 C(4),套内面积 c(10),建筑面积 c(10),;
    所在层 C(2),规划用途 C(4),备案总价 C(12),户型 C(12),销售状态 C(8))
? "共 "+TRANSFORM(nPageCount)+" 页"
? "第 1 页 成 功"
GetTable(STREXTRACT(cTxt,[<tbody>],[</tbody>]))
FOR i=2 TO nPageCount
    cTxt = UrlDownload(cUrl+"?page="+TRANSFORM(i), cookie)
    ? "第 "+TRANSFORM(i)+" 页"+IIF(!EMPTY(cTxt), " 成 功"," 失 败")
    IF !EMPTY(cTxt)
        GetTable(cTxt)
    ENDIF
    INKEY(1)  && 要延时
ENDFOR
SELECT * FROM tt
CLEAR DLLS
RETURN

FUNCTION UrlDownload(cUrl, Cookie, nFlags)
    LOCAL wh
    wh = CREATEOBJECT("WinHttp.WinHttpRequest.5.1") 
    wh.Open("GET", cUrl, 0)
    wh.SetRequestHeader("Cookie", Cookie)
    wh.Send()
    IF wh.status==200
        IF !EMPTY(nFlags)
            RETURN wh.ResponseText
        ENDIF
        RETURN STREXTRACT(wh.ResponseText,[<tbody>],[</tbody>])
    ENDIF 
    RETURN ""
ENDFUNC

FUNCTION GetTable(cTxt)
    LOCAL i,tr
    FOR i =1 TO OCCURS("<tr>",cTxt)
        tr = STREXTRACT(cTxt, [<tr>], [</tr>], i)
        INSERT INTO tt VALUES (;
            ALLTRIM(STREXTRACT(tr, [>], [<], 1), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 3), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 5), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 7), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 9), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 11), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 13), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 15), 0h20,0h0D,0h0A),;
            ALLTRIM(STREXTRACT(tr, [>], [<], 17), 0h20,0h0D,0h0A))
    ENDFOR
ENDFUNC

FUNCTION GetUrlCookie(cUrl)
    cHtml = UrlToStr(cUrl)
    IF EMPTY(cHtml)
       RETURN ""
    ENDIF
    jsCode = GetJSCode(cHtml,7) + 0h0D0A
    cTxt = STREXTRACT(cHtml,[<script>],[</script>],2)
    TEXT TO jsCode TEXTMERGE NOSHOW PRETEXT 7
        <<jsCode>>
        <<cTxt>>
        var h = CryptoJS;
        var a = h.enc.Utf8.parse(a1);
        var b = h.enc.Utf8.parse(b1);
        var c = h.enc.Utf8.parse(c1);
        var d = h.AES.encrypt(c, a, { iv: b, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
        var f = d.ciphertext.toString();
        var vCookie = d1 + "=" + f;
    ENDTEXT
    sc = CREATEOBJECT("ScriptControl")
    sc.Language = "JavaScript"
    sc.AddCode(jsCode)
    RETURN sc.Eval("vCookie")
ENDFUNC

FUNCTION UrlToStr(cUrl)
    IF URLDownloadToFileA(0,cUrl,"tmp.txt",0,0) != 0
        MESSAGEBOX("调用UrlToStr失败")
        RETURN ""
    ENDIF 
    DeleteUrlCacheEntry(cUrl)
    ret = STRCONV(FILETOSTR("tmp.txt"),11)
    DELETE FILE tmp.txt
    RETURN ret
ENDFUNC

FUNCTION GetJSCode(cHtml, n)
    LOCAL jsCode, jsUrl
    jsUrl = "https:// + STREXTRACT(cHtml,[<script src="],["></script>],n)
    RETURN UrlToStr(jsUrl)
ENDFUNC 


2021-09-05 16:51
schtg
Rank: 12Rank: 12Rank: 12
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1546
专家分:3003
注 册:2012-2-29
收藏
得分:0 
@吹版,高!谢谢!
2021-09-05 19:02
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9802
专家分:26906
注 册:2012-2-5
收藏
得分:0 
回复 26楼 吹水佬
共下载数据160条

坚守VFP最后的阵地
2021-09-05 19:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10539
专家分:42927
注 册:2014-5-20
收藏
得分:0 
以下是引用sdta在2021-9-5 19:07:42的发言:

共下载数据160条

全部成功应该是164条,其中第17页4条
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
2021-09-05 19:51
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9802
专家分:26906
注 册:2012-2-5
收藏
得分:0 
我的电脑上下载第17页失败,不知是什么原因

坚守VFP最后的阵地
2021-09-05 19:53
快速回复:请高手指点一下 如何获取这个网页的数据
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029407 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved