标题:老师好,又来请教了,这个网页的采集入口如何找,谢谢
只看楼主
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
真心佩服
2021-06-02 03:59
schtg
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:https://t.me/pump_upp
等 级:贵宾
威 望:67
帖 子:1355
专家分:2534
注 册:2012-2-29
得分:0 
受益,谢谢!
2021-06-02 05:26
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdta在2021-6-1 23:11:24的发言:

STREXTRACT()在解析这种大块头JSON数据中速度确实慢,ALINES()速度则飞快,建议大家以后解析类似这种大块头的文本,使用ALINES()函数。ALINES()是解析文本字符的利器。

这个循环有2000多次,STREXTRACT()在循环体每次从头起搜索大块头肯定快不了。
ALINES()在分配内存和读入数据时有点耗时,以后寻址取数就快了。
循环体内如果能用其他字符串函数代替ALINES()应该会快点,用ALINES()来处理较规范的数据确是便捷些。

有点不明白,VFP既然有SYS(2600)使用到指针,为何不提供处理指针的方法?

试用指针来处理这个问题,好象可以做到 0.1 秒杀,大家试试看:
程序代码:
DECLARE LONG GetProcessHeap IN Kernel32
DECLARE LONG HeapAlloc IN kernel32 LONG, LONG, LONG
DECLARE LONG HeapFree IN Kernel32 LONG, LONG, LONG
DECLARE LONG strstr IN msvcrt LONG,STRING@

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)
oHTTP=NEWOBJECT("MSXML2.XMLHTTP")
oHTTP.Open("GET", cUrl, .F.)
oHTTP.SETREQUESTHEADER("Content-Type", "text/html;charset=UTF-8")
oHTTP.Send()
lcText = oHTTP.ResponseText

t1 = SECONDS()
nSize = LEN(lcText)+1
pText = HeapAlloc(GetProcessHeap(), 8, nSize)
SYS(2600, pText, nSize, lcText+0h00)

p = strstr(pText, "lotteryDrawNum")
DO WHILE p > 0
    DrawNum =  SYS(2600, p+17, 5)
    p2 = strstr(p, "lotteryDrawResult") + 20
    p = strstr(p2, "lotteryEquipmentCount") + 23
    EquipmentCount = VAL(SYS(2600, p, 1))
    INSERT INTO 大乐透 VALUES (SYS(2600, p2, 2),;
                               SYS(2600, p2+3, 2),;
                               SYS(2600, p2+6, 2),;
                               SYS(2600, p2+9, 2),;
                               SYS(2600, p2+12, 2),;
                               SYS(2600, p2+15, 2),;
                               SYS(2600, p2+18, 2),;
                               DrawNum, EquipmentCount)
    p = strstr(p, "lotteryDrawNum")
ENDDO
? SECONDS() - t1  && 0.094
HeapFree(GetProcessHeap(), 1, pText)
SELECT * FROM 大乐透
RETURN


2021-06-02 10:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 33楼 吹水佬
这个方法不错,学习了!
0.084秒

坚守VFP最后的阵地
2021-06-02 11:01
jinanshui
Rank: 2
等 级:论坛游民
帖 子:274
专家分:64
注 册:2009-10-6
得分:0 
真厉害,0.040秒
2021-06-02 16:59
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用jinanshui在2021-6-2 16:59:29的发言:

真厉害,0.040秒

楼主的电脑高配

坚守VFP最后的阵地
2021-06-02 17:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
吹版请教几个问题:
1 msvcrt.dll 是API 动态链接库吗
2 strstr()函数的功能是什么,其中只有两个参数吗,网上没找到用法,能详细介绍下用法吗

坚守VFP最后的阵地
2021-06-02 21:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdta在2021-6-2 21:35:00的发言:

吹版请教几个问题:
1 msvcrt.dll 是API 动态链接库吗
2 strstr()函数的功能是什么,其中只有两个参数吗,网上没找到用法,能详细介绍下用法吗

msvcrt.dll是windows自带的C语言运行库,VFP9运行库也自带v7.1版本的msvcr71.dll
strstr(s1,s2)是在s1搜寻s2,成功返回s2地址,失败返回0
strstr()是用基本算法按顺序逐个字符比对搜索,效率不算高
2021-06-03 08:30
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
以下是引用吹水佬在2021-6-3 08:30:49的发言:


msvcrt.dll是windows自带的C语言运行库,VFP9运行库也自带v7.1版本的msvcr71.dll
strstr(s1,s2)是在s1搜寻s2,成功返回s2地址,失败返回0
strstr()是用基本算法按顺序逐个字符比对搜索,效率不算高

谢谢吹版回复
以前从没用过API函数,看样子要从头学习API函数

坚守VFP最后的阵地
2021-06-04 12:02
nbwww
Rank: 6Rank: 6
等 级:贵宾
威 望:10
帖 子:222
专家分:468
注 册:2021-1-9
得分:0 
收藏收藏
2021-06-04 15:05



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




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

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