| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1653 人关注过本帖
标题:怎样将“VFP论坛”上发表的帖子主题下载下来
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10903
专家分:43527
注 册:2014-5-20
收藏
得分:16 
试了一下338页也不用多少时间。
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
DECLARE long URLDownloadToFileA  IN urlmon  long,string,string,long,long
DECLARE long DeleteUrlCacheEntry IN wininet string

DECLARE long malloc IN msvcrt long
DECLARE long free   IN msvcrt as _free long
DECLARE long strcpy IN msvcrt long,string
DECLARE long strstr IN msvcrt long,string

CREATE TABLE vfplt (序号 N(8), 主题 C(240), 发表 C(20), 回复 C(6), 人气 C(8), 最后更新 C(30))
n序号 = 0
FOR i=1 TO 338
    url = "https://bbs.bc-/forum-22-" + TRANSFORM(i) + ".html"
    getPageData(getHtml(url))
    ?? url + 0h0D
ENDFOR 
SELECT * FROM vfplt
CLEAR ALL 
RETURN

FUNCTION getPageData(cHtml)
    LOCAL pHtml, p
    pHtml = _malloc(LEN(cHtml)+1)
    IF pHtml == 0
        RETURN
    ENDIF
    strcpy(pHtml, cHtml)
    p = pHtml
    DO WHILE p > 0
        getTextByTagName(@p, [<td class="title">], [</td>])
        getTextByTagName(@p, [<a], [</a>])
        c主题 = getTextByTagName(@p, [>], [</a>])
        getTextByTagName(@p, [<td class="l_au">], [</td>])
        getTextByTagName(@p, [<a], [</a>])
        c发表 = getTextByTagName(@p, [>],  [</a>])
        c回复 = getTextByTagName(@p, [<td class="l_re">], [</td>])
        c人气 = getTextByTagName(@p, [<td class="l_re">], [</td>])
        getTextByTagName(@p, [<td class="l_last">], [</td>])
        getTextByTagName(@p, [<a], [</a>])
        c最后更新 = getTextByTagName(@p, [>],  [</a>])
        getTextByTagName(@p, [<a], [</a>])
        c最后更新 = c最后更新 + " " + getTextByTagName(@p, [>],  [</a>])
        IF !EMPTY(c主题)
            n序号 = n序号 + 1
            INSERT INTO vfplt VALUES (n序号, c主题, c发表, c回复, c人气, c最后更新)
        ENDIF 
    ENDDO 
    _free(pHtml)
ENDFUNC

FUNCTION getTextByTagName(p, cBeginTagName, cEndTagName)
    IF p == 0
        RETURN ""
    ENDIF 
    p = strstr(p, cBeginTagName)
    IF p == 0
        RETURN ""
    ENDIF
    p = p + LEN(cBeginTagName)
    LOCAL p2
    p2 = strstr(p, cEndTagName)
    IF p2 == 0
        RETURN ""
    ENDIF
    RETURN SYS(2600, p, p2-p)
ENDFUNC

FUNCTION getHtml(url)
    LOCAL tmpHtml
    tmpHtml = "C:\_temp\bccn_vfp.html"    && 临时文件要用自己的路径
    DeleteUrlCacheEntry(url)
    IF URLDownloadToFileA(0, url, tmpHtml, 0, 0)==0
        RETURN FILETOSTR(tmpHtml)
    ENDIF
    ? "下载 " + url + " 失败"
    RETURN ""
ENDFUNC

FUNCTION _malloc(nSize)
    LOCAL ptr
    ptr = malloc(nSize)
    IF ptr == 0
        ? "执行malloc()分配内存失败"
    ENDIF 
    RETURN ptr
ENDFUNC



[此贴子已经被作者于2025-11-14 20:37编辑过]

2025-11-14 20:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10903
专家分:43527
注 册:2014-5-20
收藏
得分:0 
回复 18楼 cssnet
就系啦:不是快慢问题。
能快不快才是问题。
不给快用超级计算机也没用。
2025-11-14 20:33
王咸美
Rank: 1
等 级:新手上路
帖 子:883
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!问题完美解决。
2025-11-14 21:03
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10903
专家分:43527
注 册:2014-5-20
收藏
得分:0 
ie的解析器虽然是古董,但还可以用,速度相对慢少少。
程序代码:
DECLARE long URLDownloadToFileA  IN urlmon  long,string,string,long,long
DECLARE long DeleteUrlCacheEntry IN wininet string

dom = CREATEOBJECT("htmlfile")

CREATE TABLE vfplt (序号 N(8), 主题 C(240), 发表 C(30), 回复 C(6), 人气 C(8), 最后更新 C(30))
n序号 = 0
FOR i=1 TO 1  && 338
    url = "https://bbs.bc-/forum-22-" + TRANSFORM(i) + ".html"
    getPageData(getHtml(url))
    ?? url + 0h0D
ENDFOR 
SELECT * FROM vfplt
CLEAR ALL 
RETURN

FUNCTION getPageData(cHtml)
    cHtml = STRTRAN(cHtml, "<script", "<soript")
    dom.write(cHtml)
    tables = dom.getElementsByTagName("table")    
    FOR EACH table IN tables
        IF table.classname == "table_l"
            FOR EACH tr IN table.rows
                IF tr.cells[1].classname == "title"  AND ;
                   tr.cells[2].classname == "l_au"   AND ;
                   tr.cells[3].classname == "l_re"   AND ;
                   tr.cells[4].classname == "l_re"   AND ;
                   tr.cells[5].classname == "l_last"
                   n序号 = n序号 + 1
                   INSERT INTO vfplt VALUES (;
                       n序号,; 
                       tr.cells[1].innertext,;                        && 主题
                       STRTRAN(tr.cells[2].innertext, 0h0D0A, "  "),; && 发表
                       tr.cells[3].innertext,;                        && 回复
                       tr.cells[4].innertext,;                        && 人气
                       STRTRAN(tr.cells[5].innertext, 0h0D0A, "  ");  && 最后更新
                   )
                ENDIF 
            ENDFOR 
        ENDIF 
    ENDFOR
    dom.close
ENDFUNC

FUNCTION getHtml(url)
    LOCAL tmpHtml
    tmpHtml = "C:\_temp\bccn_vfp.html"
    DeleteUrlCacheEntry(url)
    IF URLDownloadToFileA(0, url, tmpHtml, 0, 0)==0
        RETURN FILETOSTR(tmpHtml)
    ENDIF
    ? "下载 " + url + " 失败"
    RETURN ""
ENDFUNC
2025-11-15 23:37
sych
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:450
专家分:708
注 册:2019-10-11
收藏
得分:0 
很实用,谢谢分享
2025-11-16 08:26
hsfisher
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:185
专家分:131
注 册:2009-4-26
收藏
得分:0 
2025-11-17 08:32
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:0 
以下是引用吹水佬在2025-11-15 23:37:16的发言:

ie的解析器虽然是古董,但还可以用,速度相对慢少少。

DECLARE long URLDownloadToFileA  IN urlmon  long,string,string,long,long
DECLARE long DeleteUrlCacheEntry IN wininet string

dom = CREATEOBJECT("htmlfile")

CREATE TABLE vfplt (序号 N(8), 主题 C(240), 发表 C(30), 回复 C(6), 人气 C(8), 最后更新 C(30))
n序号 = 0
FOR i=1 TO 1  && 338
    url = "https://bbs.bc-cn.net/forum-22-" + TRANSFORM(i) + ".html"
    getPageData(getHtml(url))
    ?? url + 0h0D
ENDFOR
SELECT * FROM vfplt
CLEAR ALL
RETURN

FUNCTION getPageData(cHtml)
    cHtml = STRTRAN(cHtml, "<script", "<soript")
    dom.write(cHtml)
    tables = dom.getElementsByTagName("table")   
    FOR EACH table IN tables
        IF table.classname == "table_l"
            FOR EACH tr IN table.rows
                IF tr.cells[1].classname == "title"  AND ;
                   tr.cells[2].classname == "l_au"   AND ;
                   tr.cells[3].classname == "l_re"   AND ;
                   tr.cells[4].classname == "l_re"   AND ;
                   tr.cells[5].classname == "l_last"
                   n序号 = n序号 + 1
                   INSERT INTO vfplt VALUES (;
                       n序号,;
                       tr.cells[1].innertext,;                        && 主题
                       STRTRAN(tr.cells[2].innertext, 0h0D0A, "  "),; && 发表
                       tr.cells[3].innertext,;                        && 回复
                       tr.cells[4].innertext,;                        && 人气
                       STRTRAN(tr.cells[5].innertext, 0h0D0A, "  ");  && 最后更新
                   )
                ENDIF
            ENDFOR
        ENDIF
    ENDFOR
    dom.close
ENDFUNC

FUNCTION getHtml(url)
    LOCAL tmpHtml
    tmpHtml = "C:\_temp\bccn_vfp.html"
    DeleteUrlCacheEntry(url)
    IF URLDownloadToFileA(0, url, tmpHtml, 0, 0)==0
        RETURN FILETOSTR(tmpHtml)
    ENDIF
    ? "下载 " + url + " 失败"
    RETURN ""
ENDFUNC


我下来试用,被提示:“下载......失败”。不知道何故了!

只求每天有一丁点儿的进步就可以了
2025-11-18 13:01
王咸美
Rank: 1
等 级:新手上路
帖 子:883
专家分:3
注 册:2018-1-4
收藏
得分:0 
我用的IE浏览器,将https改为http,能顺利下载。
2025-11-18 13:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10903
专家分:43527
注 册:2014-5-20
收藏
得分:0 
以下是引用wengjl在2025-11-18 13:01:13的发言:

我下来试用,被提示:“下载......失败”。不知道何故了!

一字不改照做吗:"C:\_temp\bccn_vfp.html"
2025-11-18 13:18
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2352
专家分:4210
注 册:2007-4-27
收藏
得分:0 
以下是引用吹水佬在2025-11-18 13:18:52的发言:


一字不改照做吗:"C:\_temp\bccn_vfp.html"


我在C盘 建立“_temp”文件夹,在目录中测试的。浏览器是360的。win7+vfp8.0



只求每天有一丁点儿的进步就可以了
2025-11-18 13:48
快速回复:怎样将“VFP论坛”上发表的帖子主题下载下来
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026288 second(s), 11 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved