| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 342 人关注过本帖
标题:怎样将“VFP论坛”上发表的帖子主题下载下来
只看楼主 加入收藏
王咸美
Rank: 1
等 级:新手上路
帖 子:848
专家分:3
注 册:2018-1-4
结帖率:97.45%
收藏
已结贴  问题点数:20 回复次数:22 
怎样将“VFP论坛”上发表的帖子主题下载下来
怎样将“VFP论坛”上发表的帖子主题下载下来,并写入表文件vfplt.dbf中,vfplt.dbf中字段有:序号 N(8),主题 C(60),发表 C(10),回复 N(6),人气 N(8),最后更新 C(20)
网页地址:https://bbs.bc-cn.net/forum-22-1.html
请各位高手赐教,万分感谢!!!(纯属个人爱好,不喜勿喷!全当路过)
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: VFP 帖子 地址 dbf 主题 
前天 16:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10842
专家分:43464
注 册:2014-5-20
收藏
得分:0 
序号字段是输入什么
前天 17:16
王咸美
Rank: 1
等 级:新手上路
帖 子:848
专家分:3
注 册:2018-1-4
收藏
得分:0 
输入贴子的数量,从1开始往上递增。
前天 17:40
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2336
专家分:4205
注 册:2007-4-27
收藏
得分:0 
我也曾有过这个想法,但实现不了,也就不了了之
这个想法的好处是查找方便!

静待高手解题,供吾辈学习!

只求每天有一丁点儿的进步就可以了
昨天 07:46
sam_jiang
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:14
帖 子:1055
专家分:1622
注 册:2021-10-13
收藏
得分:0 
回复 2楼 吹水佬
跟上次抓新浪网抓新闻标题一样,代码改改就能用
昨天 12:11
iswith
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:753
专家分:736
注 册:2013-5-14
收藏
得分:2 
图片附件: 游客没有浏览图片的权限,请 登录注册
昨天 15:51
王咸美
Rank: 1
等 级:新手上路
帖 子:848
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢!能分享具体代码吗?
昨天 16:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10842
专家分:43464
注 册:2014-5-20
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
昨天 17:17
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10842
专家分:43464
注 册:2014-5-20
收藏
得分:0 
示例只取两页作为参考
因大量处理字符串,用解析器取数据还是觉得不快,用vfp字符串函数处理就更慢。
所以用指针来试试,可能有风险,不能照抄。
程序代码:
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(10), 回复 C(6), 人气 C(8), 最后更新 C(20))
n序号 = 0
url = "https://bbs.bc-/forum-22-1.html"
getPageData(getHtml(url))
url = "https://bbs.bc-/forum-22-2.html"
getPageData(getHtml(url))
SELECT * FROM vfplt

CLEAR ALL 
RETURN

FUNCTION getPageData(cHtml)
    LOCAL pHtml, p
    pHtml = malloc(LEN(cHtml)+1)
    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>])
        n序号 = n序号 + 1
        IF !EMPTY(c主题)
            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 = cDefPath + "bccn_vfp.html"
    DeleteUrlCacheEntry(url)
    IF URLDownloadToFileA(0, url, tmpHtml, 0, 0)==0
        RETURN FILETOSTR(tmpHtml)
    ENDIF
    RETURN ""
ENDFUNC

昨天 17:25
王咸美
Rank: 1
等 级:新手上路
帖 子:848
专家分:3
注 册:2018-1-4
收藏
得分:0 
谢谢! 如果要将整个338页全部爬下来,代码要怎么改?我想要个思路,不一定要全部爬下来。
昨天 18:02
快速回复:怎样将“VFP论坛”上发表的帖子主题下载下来
数据加载中...
 
   



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

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