| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 621 人关注过本帖
标题:再次求助:如何将《仙道九绝》各章节内容完整地爬下来?
只看楼主 加入收藏
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:340
专家分:2327
注 册:2023-6-29
收藏
得分:0 
htmlfile这个组件是不会下载页面中引入的js文件的 图片之类的也不会下载 要不然你就不会使用winhttp了
前天 07:26
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:340
专家分:2327
注 册:2023-6-29
收藏
得分:0 
html和js以及图片之类的都得下载到本地才会被浏览器解析执行
前天 07:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10941
专家分:43584
注 册:2014-5-20
收藏
得分:0 
htmlfile是可以打开浏览器窗口的,39楼有提到htmlfile的parentWindow属性就是调用IHTMLWindow2接口。
IHTMLWindow2接口就是window对象。但现在想要的是无窗口的“爬行”。
简单的可以这样试试:

url = "http://www.
dom = CREATEOBJECT("htmlfile")
dom.parentWindow.navigate(url)

它还有一个open方法,可以在后台无窗口执行,但在vfp调用有异常?有空再试试。
前天 12:09
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10941
专家分:43584
注 册:2014-5-20
收藏
得分:0 
查了一下相关资料,open方法要IE支持,我的windows系统升级升级就没有IE了,InternetExplorer.Application 也不见了。
但 WebBrowser 还在,等 WebBrowser 也死掉时 htmlfile 应该也会死。看来要搞个 WebView2 的无头虫来玩玩。
没法测试 open方法了,只能下载脚本注入。
程序代码:
outFile = "C:\_temp\tmp.txt"
url_html = "http://www./6780946/3664234966.html"
url_js = "http://www./js/zepto.js"
http = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")
http.open("GET", url_html, 0)
http.send()
html_str = http.ResponseText
http.open("GET", url_js, 0)
http.send()
js_str = http.ResponseText
html = CREATEOBJECT("htmlfile")
html.write("<script>" + js_str + "</script>")
html.writeln(html_str)
INKEY(0.001)
html.close()
STRTOFILE(html.getElementById("ad").innerText,outFile)
MODIFY FILE (outFile)





[此贴子已经被作者于2025-12-11 16:34编辑过]

前天 16:22
yiyanxiyin
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:340
专家分:2327
注 册:2023-6-29
收藏
得分:0 
htmlfile是一个过时的组件, 性能很低, 据我查到的资料是不支持发送请求的,  WebView2应该可以实现无头模式,适合动态页面(js生成的页面)爬取,可以一试
前天 16:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10941
专家分:43584
注 册:2014-5-20
收藏
得分:0 
回复 45楼 yiyanxiyin
对于vfp来说htmlfile永不过时,vfp能用好用的html解析器不多见(其他编程语言支持的不算),htmlfile还是可取的。
在vfp言vfp,如果跳出vfp来说,肯定不会用htmlfile。
htmlfile可以看成是一个精简的浏览器核心部件,他能解析执行hmtl,并且能打开浏览窗口浏览。
至于htmlfile的性能方面,这就要用历史的观点去看问题,要明白她也有过辉煌的时期,就好像对vfp一样看待。
顺便说说使用htmlfile要注意的一些问题。
htmlfile是与IE有联系的,应用程序使用IE内核版本的高低对htmlfile的解析能力也随之变化,最好修改注册表将应用程序使用IE内核的版本能改多高就改多高。这个IE内核版本的设置是针对应用程序来说的,如对vfp9开发环境来说是设置为vfp9.exe的值,如果是编译后xxxx.exe程序就是xxxx.exe的值。
如何修改注册表本论坛有讨论过。





昨天 10:35
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10941
专家分:43584
注 册:2014-5-20
收藏
得分:0 
以下是引用yiyanxiyin在2025-12-11 16:52:19的发言:

 WebView2应该可以实现无头模式,适合动态页面(js生成的页面)爬取,可以一试

无头虫的WebView2比有头的就更简单些。现在当保母不容易,买菜做饭带小孩样样要到位,家事繁忙有空可试试。
以前发过一个带源码的WebView2的demo,应该也可以用用。
顺便提提那个WebView2的demo,事件大都是用异步消息的,最好定义某事件标志,再定义一个wait函数来判断事件的执行完成情况,从而达到同步效果。
wait函数的设计要有点技巧,不能用阻塞式的循环或延时来等待检测事件标志,比较方便的可用vfp的timer来定时检测事件标志。
如在timer事件,例如myNavigate方法检测NavigationCompleted事件页面是否已经载入完成(其他事件类同)。
相关代码大概如下:

** myNavigate 方法
LPARAMETERS cUrl, nDelay
this.isNavigationCompleted = .f.
WebView_Navigate(STRCONV(cUrl+0h00,5))  && 打开html
IF !EMPTY(nDelay)
    this.myWaitNavigation(nDelay)
ENDIF
RETURN this.isNavigationCompleted

** OnNavigationCompleted 事件
this.isNavigationCompleted = .t.


** timer事件
INKEY(0.01)
IF !EMPTY(thisform.isNavigationCompleted)
    this.Enabled = .f.
ENDIF

wait函数:
* myWaitNavigation(nDelay) 方法
* 检测 OnNavigationCompleted 事件的 this.isNavigationCompleted 状态
* timer1.Enabled = .t. 启动 timer 事件检测 this.isNavigationCompleted 是否有返回数据
LPARAMETERS nDelay    &&延时(秒)
LOCAL t
t = SECONDS()
this.timer1.Enabled = .t.
DO WHILE this.timer1.Enabled AND (SECONDS()-t)<nDelay
    DOEVENTS
    WebView_delay(0.1)
ENDDO
RETURN this.isNavigationCompleted


昨天 11:15
iswith
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:757
专家分:736
注 册:2013-5-14
收藏
得分:0 
这是我使用netpy在vfp中爬取的,这是通用模块,把每个章节的对应的连接获取成表,接下未做,相信你能知道接下来如何去做了。
图片附件: 游客没有浏览图片的权限,请 登录注册
昨天 11:24
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10941
专家分:43584
注 册:2014-5-20
收藏
得分:0 
回复 48楼 iswith
要装 Python 的吧
懂vfp的学用Python不难,很多库类拿来就用。还是一种“胶水”语言,可以解析其他语言脚本。
取网页三两句就可以,急用先学,最好学一点,编程语言结构都差不多。
现在有AI编程就更容易学。



[此贴子已经被作者于2025-12-12 11:46编辑过]

昨天 11:45
快速回复:再次求助:如何将《仙道九绝》各章节内容完整地爬下来?
数据加载中...
 
   



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

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