| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 226 人关注过本帖
标题:简单的 VFP 爬虫:爬取【百度百科】网络条目
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:557
专家分:380
注 册:2013-10-4
结帖率:100%
收藏
 问题点数:0 回复次数:8 
简单的 VFP 爬虫:爬取【百度百科】网络条目
对于我来说,所谓“爬虫”,无非是根据事先整理、设定好的网址条目,偷偷摸摸去爬取目标网站的内容。
——仅此而已。
至于,输入一个首页网址,然后自动逐级地解析出下级、下下级、下下下级网页来……我不会狂妄地企图用 VFP 代码去作这种繁琐的网页标记解析,那不是我该干的事情。
若有这种需求,十几年前,我会直接提交给 WepZip 6.0/7.0 去干。
后来发觉,将人家整站一锅端了,也没甚么鸟用!垃圾一大堆,有那工夫排查整理,倒不如自己重头做一个!
所以,十几年来,我再也不当这种仓鼠了。
一般是,用正则表达式整理出完整的下载索引,然后,让“爬虫”小程序批量爬取下来即可。
【百度百科】,根本没有完整的网址索引,故而,无非是自己事先整理一份感兴趣的词目列表,然后逐个逐个词目去撞它!

* --------------------
* BaiDuBaiKe.prg
* 尝试爬取【百度百科】网络条目
* 百度百科的网址规律:
* https://baike.baidu.com/item/xxxx
* 待解决的问题:
* 百度从来都不是什么善茬,也不是傻子,其反爬机制严格限制了短时间内的高频或异常访问。
* 故而,爬虫程序需完善的绝非程序运行速度问题,而是如何设置访问延迟,确保不会触发封禁!
* 比如:每60秒最多10次请求,设置等待时间为3~10秒的随机数,每小时最多1000次……等等。
* --------------------
clear all
close all

public aAgents[5]
aAgents[1] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
aAgents[2] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
aAgents[3] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
aAgents[4] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0"
aAgents[5] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Safari/605.1.15"

LOCAL lcKeyword, lcURL, lcSourceCode
LOCAL oxhttp AS Microsoft.xmlhttp
lcBaiduItem = "https://baike.baidu.com/item/"
rand(-1)

use BaiDuBaiKe
scan
    lcKeyword = alltrim(keyword)
    lcURL = lcBaiduItem + lcKeyword

    TRY
        oxhttp = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")
        oxhttp.OPEN("GET", lcURL, .F.)
        * 模拟浏览器头,以便最大程度地“欺骗”目标网站 User-Agent 验证程序!
        oxhttp.SetRequestHeader("User-Agent", aAgents[INT(RAND() * 5) + 1])
        oxhttp.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
        oxhttp.SetRequestHeader("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
        oxhttp.SetRequestHeader("Connection", "keep-alive")
        oxhttp.SetRequestHeader("Upgrade-Insecure-Requests", "1")
        oxhttp.SEND()
        lcSourceCode = oxhttp.responseBody
        if ! empty(lcSourceCode) and empty(at("error.html", lcSourceCode))
            replace Detail with lcSourceCode
            strTofile(lcSourceCode, "html/" + lcKeyword + ".htm")
        endif
    CATCH TO oException
        ? "爬取异常: " + oException.Message
        RETURN .F.
    FINALLY
        RELEASE oxhttp
    ENDTRY
endscan

return

baidubaike.rar (1.97 KB)
搜索更多相关主题的帖子: 网址 爬虫 VFP like 百度 
4 天前 14:27
camsion
Rank: 2
等 级:论坛游民
帖 子:22
专家分:15
注 册:2006-12-7
收藏
得分:0 
百度文库的可以爬吗
4 天前 15:18
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:557
专家分:380
注 册:2013-10-4
收藏
得分:0 
以下是引用camsion在2025-11-28 15:18:16的发言:

百度文库的可以爬吗


不可以。百度文库要搜“百度文档下载器”之类关键字。以前印象中我试用过,现在则不太清楚还管用不?

4 天前 21:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10907
专家分:43527
注 册:2014-5-20
收藏
得分:0 
百度文库客户端有些内容是用 canvas 绘制。

4 天前 23:23
schtg
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:Usa
等 级:贵宾
威 望:67
帖 子:2337
专家分:4855
注 册:2012-2-29
收藏
得分:0 
3 天前 06:11
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:557
专家分:380
注 册:2013-10-4
收藏
得分:0 
【百度百科】,似乎存在一个硬性的访问限制:
一旦访问达到1000次,就会因高频访问而触发图形验证码或行为验证码(如滑动验证)。
我拿它没辙。

3 天前 11:20
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:557
专家分:380
注 册:2013-10-4
收藏
得分:0 
自己爬百科,肯定不靠谱!
幸好,这世界还有维基百科!
相比之下,维基就很大方啦,官网主动提供了最新的完整数据 dump 下载:
https://dumps.
我随便下载了一个 zhwiki-20251120-pages-articles-multistream.xml.bz2 ,压缩包有 3.15GB,解压出来后有10几个GB!
将这10几个GB完整导入DBF,很显然,不太现实。
于是,三下五除二,用正则将数据大刀阔斧整理了一下,最终只剩下600多MB,如此一来就相对比较容易驾驭了!
若不会正则,还玩什么XML呢?
是吧?
嘿嘿嘿嘿。
前天 23:06
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:557
专家分:380
注 册:2013-10-4
收藏
得分:0 
很可惜,折腾了一夜一早,惊觉繁体字版的中文维基自带有某种意识形态倾向,在表述地名、人名、事件时,不符合国情。
简单地说吧——数典忘祖。
没法用!

昨天 11:58
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:329
专家分:2314
注 册:2023-6-29
收藏
得分:0 
网上不是有现成的数据集吗   https://
16 分钟前
快速回复:简单的 VFP 爬虫:爬取【百度百科】网络条目
数据加载中...
 
   



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

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