| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 53 人关注过本帖
标题:简单的 VFP 爬虫:爬取【百度百科】网络条目
只看楼主 加入收藏
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:554
专家分:380
注 册:2013-10-4
结帖率:100%
收藏
 问题点数:0 回复次数:3 
简单的 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 百度 
昨天 14:27
camsion
Rank: 2
等 级:论坛游民
帖 子:22
专家分:15
注 册:2006-12-7
收藏
得分:0 
百度文库的可以爬吗
昨天 15:18
cssnet
Rank: 5Rank: 5
等 级:职业侠客
威 望:5
帖 子:554
专家分:380
注 册:2013-10-4
收藏
得分:0 
以下是引用camsion在2025-11-28 15:18:16的发言:

百度文库的可以爬吗


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

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

昨晚 23:23
快速回复:简单的 VFP 爬虫:爬取【百度百科】网络条目
数据加载中...
 
   



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

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