标题:请高手指点一下 如何获取这个网页的数据
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
以下是引用nbwww在2021-8-30 13:37:08的发言:

可以打开的   有IP限止?

可能是,换IP就好了。
不用浏览器打开时,好象要网页的cookie才能正常获取网页

程序代码:
cUrl = "https:///project/buildtablelist/938d3183-00f9-eb11-8e8f-005056b8d0cb"
nPageCount = 0
cookie = GetUrlCookie(cUrl, @nPageCount)
IF nPageCount == 0
    RETURN
ENDIF
? "共 "+TRANSFORM(nPageCount)+" 页"
CREATE CURSOR tt (楼栋 C(50),房号 C(4),套内面积 c(10),建筑面积 c(10),;
    所在层 C(2),规划用途 C(4),备案总价 C(12),户型 C(12),销售状态 C(8))
FOR i=1 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
RETURN

FUNCTION GetUrlCookie(cUrl, nPageCount)
    LOCAL ie, cTxt
    ie = CREATEOBJECT("internetexplorer.application")
    ie.Navigate(cUrl)
    DO WHILE ie.Busy OR ie.ReadyState!=4
        INKEY(1)
        ?? " 请稍候......",TIME()+0h0D
    ENDDO
    IF VARTYPE(ie.document)!="O"
        RETURN ""
    ENDIF
    cTxt = ie.document.body.innerHTML
    nPageCount = VAL(STREXTRACT(cTxt, [page=], [">尾页], OCCURS("page=",cTxt)))
    RETURN ie.document.cookie
ENDFUNC

FUNCTION UrlDownload(cUrl, Cookie)
    LOCAL wh
    wh = CREATEOBJECT("WinHttp.WinHttpRequest.5.1") 
    wh.Open("GET", cUrl, 0)
    wh.SetRequestHeader("Cookie", Cookie)
    wh.Send()
    IF wh.status==200
        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


2021-08-30 17:45
nbwww
Rank: 6Rank: 6
等 级:贵宾
威 望:10
帖 子:222
专家分:468
注 册:2021-1-9
得分:0 
谢谢   让我先学习消化下
2021-08-30 18:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:10 
程序代码:
CREATE CURSOR lpmx (楼栋 C(50), 房号 C(4), 套内面积 c(10), 建筑面积 c(10), 所在层 C(2), 规划用途 C(4), 备案总价 C(12), 户型 C(12), 销售状态 C(8))
lcUrl = "https:///project/buildtablelist/938d3183-00f9-eb11-8e8f-005056b8d0cb"
lcText = GETURL(lcUrl, 1)
lnPage = INT(VAL(STREXTRACT(lcText, '?page=', '">尾页', 9)))

FOR ln1 = 1 TO lnPage
    lcText = GETURL(lcUrl + "?page=" + TRANSFORM(ln1), 2)
    ALINES(laText, lcText, 4 + 1, '<tr>', '</tr>')
    FOR ln2 = 2 TO ALEN(laText, 1) STEP 2
        ALINES(laTxt, laText[ln2], 4 + 1, CHR(13), CHR(10))
        INSERT INTO lpmx VALUES (STREXTRACT(laTxt[1], '>', '<'),;
                                 STREXTRACT(laTxt[2], '>', '<'),;
                                 STREXTRACT(laTxt[3], '>', '<'),;
                                 STREXTRACT(laTxt[4], '>', '<'),;
                                 STREXTRACT(laTxt[5], '>', '<'),;
                                 STREXTRACT(laTxt[6], '>', '<'),;
                                 laTxt[8],;
                                 STREXTRACT(laTxt[10], '>', '<'),;
                                 STREXTRACT(laTxt[11], '>', '<'))
    ENDFOR 
ENDFOR
BROWSE 
RETURN 

FUNCTION GETURL(UrlName, nId)
    lcStr = ""
    oHTTP = CREATEOBJECT("MSXML2.ServerXMLHTTP")
    oHTTP.Open("GET", UrlName, .F.)
    TEXT TO lcCookie NOSHOW TEXTMERGE
Hm_lvt_b33309ddse6aedc0b7a6a5e11379efd=329a1f7015f695236266a8366ef8bcc2638265d047ce81b256a824b2f3039d4086dcfd62e2832ab60e0c08a62ea9b49270c99907fc27a61da3a72f86aa801d244dbd54ab670762a4e2710372639fc3a73457755d8208e4bc0021eeb56e6bdda182770a58f2d25d5927c239f145ac3dc9373a3d21195366ff345d92173b7dadb96373f7036027b05c394f83864e091e7bf9cda9d003adff962b57097e3e55f21bab556dfb8f26718e801b1579d1a602c7; Hm_lvt_02ba6cbab8b600b7cbf07a9fea1df5a9=1630158176,1630173575,1630323282; Hm_lpvt_02ba6cbab8b600b7cbf07a9fea1df5a9=1630323282; Hm_lvt_615328aa2076e9a79247e4a9a10139b9=1630169491,1630173779,1630323284,1630323327; Hm_lpvt_615328aa2076e9a79247e4a9a10139b9=1630323362
    ENDTEXT
    oHTTP.SetRequestHeader("Cookie", lcCookie)
    oHTTP.Send()
    IF oHTTP.Status = 200
        IF nId = 2
            lcStr = STREXTRACT(oHTTP.ResponseText, '<tbody>', '</tbody>')
        ELSE 
            lcStr = oHTTP.ResponseText
        ENDIF 
    ENDIF 
    RELEASE oHTTP
    RETURN lcStr
ENDFUNC 

坚守VFP最后的阵地
2021-08-30 21:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 13楼 sdta
cookie好象有时限,过时就无效
2021-08-30 21:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用吹水佬在2021-8-30 21:13:59的发言:

cookie好象有时限,过时就无效

是的,数据下载不完全

坚守VFP最后的阵地
2021-08-30 21:32
nbwww
Rank: 6Rank: 6
等 级:贵宾
威 望:10
帖 子:222
专家分:468
注 册:2021-1-9
得分:0 
  学习中
2021-08-31 19:04
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdta在2021-8-30 21:32:23的发言:


是的,数据下载不完全

从自动跳转的页面代码看,COOKIE的创建过程:
程序代码:
    <script src="/src/js/jquery.cookie.min.js?v=1"></script>
    <script src="/src/js/crypto-js-4.0.0/crypto-js.js?v=1"></script>

    <script>
        var a1 = "784A9BB8C2B542F6B7133E45B4C9BC50";
        var b1 = "61B2D25DB69F2B3A06485A2293FCFCA79D29AF3E829B22CA0D5E7DC2A0AE586ABD0975AB7B31182194F61E73F576C44C";
        var c1 = '10B242A121CBFD7C6F09AA9F5150C081046DC982B5364AB4D73F1776A362A75A67DB9697A51FADF68E62CF5384F8FC51DA80F71FEFC90F3D3922B813383DD1259681A5EFAEDCEF578A92440E73A5582B';
        var d1 = 'Hm_lvt_b33309ddse6aedc0b7a6a5e11379efd'
        var h1 = '.'
        var i1 = 'http://'
        var k1 = 0
    </script>
    <script src="/src/js/jquery.sprawl.js?v=1"></script>

$(function () {
    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 date = new Date();
    date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000));
    $.cookie(d1, f, { domain: h1, expires: date });
    if (!k1) {
        location.replace(i1)
    }
});

创建语句:
$.cookie(d1, f, { domain: h1, expires: date });
是创建一个带域名和时限的cookie

自动跳转到:http://
location.replace(i1)


[此贴子已经被作者于2021-9-3 10:55编辑过]

2021-09-03 10:54
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 17楼 吹水佬
VFP代码如何写

坚守VFP最后的阵地
2021-09-03 19:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdta在2021-9-3 19:38:51的发言:

VFP代码如何写

先截获到跳转页面,就可以看到那些JS代码
相关几个JS文件:
http://
http://
http://
如果能整理出相关的JS代码,VFP可以用ScriptControl控件执行JS代码。
有兴趣的话最好将相关的JS代码转换为VFP代码,就看有无这必要。
2021-09-03 21:38
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
这也太高大上啦,哈哈^_^
2021-09-04 05:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506694-1-1.html




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

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