标题:老师好,又来请教了,这个网页的采集入口如何找,谢谢
只看楼主
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
向各位学习,谢谢!
2021-06-01 18:13
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
在各位老师的帮助下终于,成功了,谢谢,虽然很慢,但是毕竟成功了
CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5))
lcUrl = "https://webapi.
oHTTP=NEWOBJECT("MSXML2.XMLHTTP")
oHTTP.Open("GET", lcUrl, .F.)
oHTTP.SETREQUESTHEADER("Content-Type", "text/html;charset=UTF-8")
oHTTP.Send()
lcText = STRCONV(oHTTP.ResponseBody, 11)
lmText = STREXTRACT(lcText,'lotteryUnsortDrawresult":"','","matchList')
lyText = STREXTRACT(lcText,',"lotteryDrawNum":"','","lotteryDrawResult":"')
lstext = OCCURS("lotteryDrawNum", lcText)
? lmText ,lyText ,lstext
FOR lnj = 1 TO OCCURS("lotteryDrawNum", lcText)
    lyText = STREXTRACT(lcText,',"lotteryDrawNum":"','","lotteryDrawResult":"', lnj)
    lmText = STREXTRACT(lcText,'lotteryUnsortDrawresult":"','","matchList', lnj)
   h1 = Substr(lmText ,1,2)
   h2 = Substr(lmText ,4,2)
   h3 = Substr(lmText ,7,2)
   h4 = Substr(lmText ,10,2)
   h5 = Substr(lmText ,13,2)
   l1 = Substr(lmText ,16,2)
   l2 = Substr(lmText ,19,2)
   q1 = Substr(lyText ,1,5)
   INSERT INTO 大乐透 VALUES (h1,h2,h3,h4,h5,l1,l2,q1)
  ENDFOR

[此贴子已经被作者于2021-6-1 20:47编辑过]

2021-06-01 20:41
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
另外,各位老师,没有找到使用第几套球的采集入口,麻烦各位老师再看看,谢谢.
2021-06-01 21:02
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用jinanshui在2021-6-1 21:02:45的发言:

另外,各位老师,没有找到使用第几套球的采集入口,麻烦各位老师再看看,谢谢.

应该是这个字段:lotteryEquipmentCount

坚守VFP最后的阵地
2021-06-01 21:18
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用jinanshui在2021-6-1 20:41:30的发言:

在各位老师的帮助下终于,成功了,谢谢,虽然很慢,但是毕竟成功了
CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5))
lcUrl = "https://webapi.
oHTTP=NEWOBJECT("MSXML2.XMLHTTP")
oHTTP.Open("GET", lcUrl, .F.)
oHTTP.SETREQUESTHEADER("Content-Type", "text/html;charset=UTF-8")
oHTTP.Send()
lcText = STRCONV(oHTTP.ResponseBody, 11)
lmText = STREXTRACT(lcText,'lotteryUnsortDrawresult":"','","matchList')
lyText = STREXTRACT(lcText,',"lotteryDrawNum":"','","lotteryDrawResult":"')
lstext = OCCURS("lotteryDrawNum", lcText)
? lmText ,lyText ,lstext
FOR lnj = 1 TO OCCURS("lotteryDrawNum", lcText)
    lyText = STREXTRACT(lcText,',"lotteryDrawNum":"','","lotteryDrawResult":"', lnj)
    lmText = STREXTRACT(lcText,'lotteryUnsortDrawresult":"','","matchList', lnj)
   h1 = Substr(lmText ,1,2)
   h2 = Substr(lmText ,4,2)
   h3 = Substr(lmText ,7,2)
   h4 = Substr(lmText ,10,2)
   h5 = Substr(lmText ,13,2)
   l1 = Substr(lmText ,16,2)
   l2 = Substr(lmText ,19,2)
   q1 = Substr(lyText ,1,5)
   INSERT INTO 大乐透 VALUES (h1,h2,h3,h4,h5,l1,l2,q1)
  ENDFOR

看下ALINES()的用法

坚守VFP最后的阵地
2021-06-01 21:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 

坚守VFP最后的阵地
2021-06-01 21:23
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
回复 22楼 jinanshui
测试结果的确有点慢,比对了一下:
耗时:254秒
程序代码:
CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5))
lcUrl = "https://webapi./gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=0"
oHTTP=NEWOBJECT("MSXML2.XMLHTTP")
oHTTP.Open("GET", lcUrl, .F.)
oHTTP.SETREQUESTHEADER("Content-Type", "text/html;charset=UTF-8")
oHTTP.Send()
lcText = oHTTP.ResponseText

t1 = SECONDS()
FOR lnj = 1 TO OCCURS("lotteryDrawNum", lcText)
    lyText = STREXTRACT(lcText,',"lotteryDrawNum":"','"', lnj)
    lmText = STREXTRACT(lcText,'lotteryUnsortDrawresult":"','"', lnj)
    h1 = Substr(lmText ,1,2)
    h2 = Substr(lmText ,4,2)
    h3 = Substr(lmText ,7,2)
    h4 = Substr(lmText ,10,2)
    h5 = Substr(lmText ,13,2)
    l1 = Substr(lmText ,16,2)
    l2 = Substr(lmText ,19,2)
    INSERT INTO 大乐透 VALUES (h1,h2,h3,h4,h5,l1,l2,lyText)
ENDFOR
? SECONDS() - t1 && 254秒


用JS代码相对也只要1秒多点,真有点意外,大家测试一下:
程序代码:
CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5))
cUrl = "https://webapi./gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=0"
oHttp = CREATEOBJECT("MSXML2.XMLHTTP")
oHttp.Open("GET", cUrl, .F.)
oHttp.Send()

t1 = SECONDS()

jsCode = 'var data=' + oHttp.responseText + ';' +;
         'var list=data["value"]["list"];' +;
         'function getList(n,name){return list[n][name];}'
oSC = CREATEOBJECT("ScriptControl")
oSC.Language = "JavaScript"
oSC.AddCode(jsCode)
FOR i=0 TO oSC.eval('list.length')-1
    lyText = oSC.run("getList",i,"lotteryDrawNum")
    lmText = oSC.run("getList",i,"lotteryUnsortDrawresult")
    h1 = Substr(lmText ,1,2)
    h2 = Substr(lmText ,4,2)
    h3 = Substr(lmText ,7,2)
    h4 = Substr(lmText ,10,2)
    h5 = Substr(lmText ,13,2)
    l1 = Substr(lmText ,16,2)
    l2 = Substr(lmText ,19,2)
    INSERT INTO 大乐透 VALUES (h1,h2,h3,h4,h5,l1,l2,lyText)
ENDFOR
? SECONDS() - t1 && 1.6秒




2021-06-01 22:18
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 27楼 吹水佬
楼主:300秒
吹版:0.9秒

坚守VFP最后的阵地
2021-06-01 22:49
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
程序代码:
CLEAR 
CREATE CURSOR 大乐透 (红1 C(2), 红2 C(2), 红3 C(2),红4 C(2),红5 C(2),兰1 C(2),兰2 C(2),期号 C(5), 球具 N(1))
cUrl = "https://webapi./gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=0&" + SUBSTR(SYS(2015), 2)
t1 = SECONDS()
oHttp = CREATEOBJECT("MSXML2.XMLHTTP")
oHttp.Open("GET", cUrl, .F.)
oHttp.Send()
lcText = oHttp.ResponseText
? "下载数据:", SECONDS() - t1
t1 = SECONDS()
lcText = STREXTRACT(lcText, '{"list":[{"', '')
ALINES(laText, lcText, '{}},{"')
FOR ln1 = 1 TO ALEN(laText, 1)
    ALINES(laStr, laText[ln1], '},{"', '":', ',"', '[{"', '}]')
    ALINES(laHm, &laStr[14], SPACE(1))
    INSERT INTO 大乐透 VALUES (laHm[1], laHm[2], laHm[3], laHm[4], laHm[5], laHm[6], laHm[7], &laStr[12], &laStr[20])
ENDFOR
? "解析数据:", SECONDS() - t1 && 0.6秒
BROWSE 


[此贴子已经被作者于2021-6-1 23:19编辑过]


坚守VFP最后的阵地
2021-06-01 23:02
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
STREXTRACT()在解析这种大块头JSON数据中速度确实慢,ALINES()速度则飞快,建议大家以后解析类似这种大块头的文本,使用ALINES()函数。ALINES()是解析文本字符的利器。

坚守VFP最后的阵地
2021-06-01 23:11



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




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

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