[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

批处理提取网页中《西游记》原文

本帖最后由 batman 于 2011-4-29 12:10 编辑

要求用批处理提取http://bbs.tt365.net.cn/viewthread.php?tid=161145网页贴子中《西游记》原文。

注意原文都是用【】括起来的,但要进行去重处理。

而这个去重处理包括去除重复出现的原文以及原文中有的短句如:

【一件破烂流丢一口钟】与【一件破烂流丢一口钟】(去除后面这句)

【悟空道:“但凭尊师教诲,只是有些道气儿,弟子便就学了。”】与【只是有些道气儿】(去除后面这句)

最后所有提取的内容输出为a.txt(一行一句),可以使用临时文件,同时请尽量不使用第三方工具。
***共同提高***

本帖最后由 namejm 于 2011-4-29 11:35 编辑

如果纯挑战的话
限制不使用第三方倒也无可厚非
只是恐怕愿意来挑战的就没有几个人了
动力不足是个大问题
如果能明言挑战这个题目的真实意图
并且不限制是否使用第三方
倒是有可能有大批的人来做
——你恐怕是想在论坛里抓小说吧?

下载网页肯定得用第三方
去除网页代码肯定得用第三方
若是我来做的话,就至少有两个命令行需要使用
1、curl或wget
2、HtoX32c
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

2# namejm
我知道第三方的强大,但我提出这个挑战的目的就是要扩充批的实用性。

ps:jm你应该知道我在提出问题前,自己肯定是已经成功完成了的。。。。
***共同提高***

TOP

抓网页内容不用第三方也行,调用VBS嘿嘿。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

4# Batcher
思路一致,呵呵。。。
***共同提高***

TOP

严格说来VBS也是第三方

TOP

本帖最后由 caruko 于 2011-4-29 14:48 编辑

要获取网页内容,如果不用第三方的话,必须
start "" /min "C:\Program Files\Internet Explorer\IEXPLORE.EXE" "http://bbs.tt365.net.cn/viewthread.php?tid=161145"
打开网页,然后提取缓存。 最后根据窗口标题名,taskkill掉。
如果这些都是给定的条件,那么容易不少。否者可能要wmic开启进程了。

TOP

那ie算不算第三方呢...

TOP

还有一种方法
1, ping bbs.tt365.net.cn 取得目标IP
2, start 网页
3, 取得缓存
4, 根据netstat -o 对比IP 获取 IE的PID,然后taskkill。

TOP

ping、netstat之类的也不是built-in啊
楼主出题的本意不是让大家扣字眼到底哪些是第三方
他不让用wget/curl,你就偏偏用,他还能吃了你?
无非是让大家练练手而已
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

10# Batcher


啊!太口怕了,版主竟然吃人...

TOP

本帖最后由 caruko 于 2011-4-29 16:53 编辑

发一个取【】内容的代码吧,鉴于【】都在一行,所以没有多做分析。
但就算【】内容分做2行,IF里面加一句判断 !cut:~-1!==$ 就可以了。

抓取网页内容,前面已说了方法,第三方的话更简单,就不写了。
去掉了多余的CALL。

去重只是简单的当前这句跟上一句对比,如果包含在上一句内,就不输出,并且下一句对比时忽略这一句,跟上上句对比。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "usebackq delims=" %%i in ("viewthread[2].txt") do (
  3.     set "str=%%~i"
  4.     if not "!str:【=!" == "!str!" (
  5.         set "str=!str:【=" "#!"
  6.         set "str=!str:】=" "$!"
  7.         for %%i in ("!str!") do (
  8.             set "cut=%%~i"
  9.             if "!cut:~0,1!"=="#" if !flag! equ 1 (
  10.                 set "s_new=!cut:~1!"
  11.             ) else (
  12.                 set flag=1
  13.                 set "s_old=!cut:~1!"
  14.                 set "s_new=!cut:~1! "
  15.             )
  16.             for /f "delims=" %%S in ("!s_new!") do if "!s_old:%%S=#!"=="!s_old!" echo %%S&set "s_old=!s_new!"
  17.         )
  18.      )
  19. )
  20. pause>nul&goto :eof
复制代码

TOP

明确一下第三方的概念
就是初始安装的操作系统中未包含的程序或者数据
不要刻意扩大或者缩小
那对解题没有任何助力

如果有必要
可以使用ASCODE技术将任何程序或数据编码
存储到批处理自身中
运行时再进行解码后调用

对于start 网页的形式
可能打开非IE内核的浏览器
这将影响缓存的确定
不建议使用
天的白色影子

TOP

12# caruko
最好能将所有代码写出来,大家本来就是为了交流嘛。。。

ps:去重有点麻烦哦。。。
***共同提高***

TOP

应该放在VBS出题区比较好吧?
而且也没有什么挑战性,会VBS且会xmlhttp、adodb.stream、DOM等常见“第三方”对象的使用,本题迎刃而解,关键是要知道那几个对象。

其实我想问这个问题:如何用vbs从图片中读出验证码(如果有人研究出来了,肯定不能随便公开^@^)

TOP

返回列表