中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: 再问一段循环的代码 上一主题 | 下一主题
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『楼 主』:  再问一段循环的代码

没办法,手中的活没做完,只能再发贴求助了,

主要思路:从一个文本里逐行提取URL中的一部分字符,交给wget去下载网页,然后用find找关键字,找到了提交某个字符给文本,如果遇到网络不好,无法显示页面就重新下载并识别,直到下载到有关键字的正常网页为止,

我现在这样写:

@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "无法显示网页" D:\%%i.htm >nul&& 想用当前的URL字符值重新下载怎么写?
)



没有基础搞很久都不成,请大虾们务必指导下,嘿嘿,明天再来看,谢谢>>>>>

2006-12-23 16:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 2 楼』:  

再看下~~

2006-12-23 22:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 3 楼』:  

  顶楼的,请你把条件说得清楚一点,在关键的地方用模糊指代的语言是不可能让别人帮你想办法的。

  请你至少把以下内容交代清楚:

  1、一个文本?什么内容?具体格式?有何规律?
      2、URL中的哪部分字符?
  3、find关键字是什么?
  4、提交字符给文本?什么样的字符?交给哪个文本?

  缺少了以上任何一项,不可能写出任何一行代码。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-24 02:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 4 楼』:  

如果遇到网络不好,无法显示页面就重新下载并识别,直到下载到有关键字的正常网页为止
这点可以用wget的自身参数实现

2006-12-24 02:11
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 5 楼』:  

sleep 3000
这句没有起到什么作用,可以删除

2006-12-24 02:13
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 6 楼』:  



  Quote:
Originally posted by namejm at 2006-12-23 13:08:
 㠮..

  1、一个文本?什么内容?具体格式?有何规律?
只是举个例就性,如上面那个%%i就是UID,逐行提取
      2、URL中的哪部分字符?
如:
54899
476666
65453
2439
  3、find关键字是什么?
要设定关键字是"无法显示网页",时重新下载网页,这个是防止网络不好是用的,也是我发贴想问的..
  4、提交字符给文本?什么样的字符?交给哪个文本?
这个不用回答,echo %%i>>D:\正常.txt这些我自己来完成

不知斑斑明白了吗?对不起哦~~

2006-12-24 02:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by vkill at 2006-12-23 13:13:
sleep 3000
这句没有起到什么作用,可以删除

是吗?主要是想提高代码的可靠性,想100%下载来,不要有无法显示的..


可以用wget的自身参数实现 ..

大虾指教下,非常之感谢!!!

2006-12-24 02:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 8 楼』:  

  1、请把你的 123.txt 内容张贴一部分出来,“上面那个%%i就是UID” 这样的说法对写代码没有任何帮助,说了也等于没说;
  2、在没有见到 123.txt 的内容之前,你这样的说法没有任何意义,还是白说;
  3、不发表任何意见;
  4、你这样一说,我好象明白了些什么,但是我很快又什么也不明白了。

  说到底,你还是不太明白请求别人帮助的时候,究竟该给别人提供些什么信息,请你站在解答问题这个角度来思考,想想该提供些什么信息。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-12-24 02:30
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by namejm at 2006-12-23 13:30:

  1、请把你的 123.txt 内容张贴一部分出来,“上面那个%%i就是UID” 这样的说法对写代码没有任何帮助,说了也等于没说;
  2、在没有见到 123.txt 的内容之前,你这样的说法没有任何意义,还是白说;

123.TXT就是这样的,一次只提取一行,我那些代码已经做到了:
54899
476666
65453
2439

主要想遇到网络故障时,不断的去下载没完成的..比如在提取到"65453"去下载时遇到网络故障,就是想不段的去试下载这个含"65453"URL的网页

[ Last edited by ka56 on 2006-12-23 at 01:39 PM ]

2006-12-24 02:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 10 楼』:  

wget的参数,baidu搜索很多的啊

2006-12-24 02:46
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 11 楼』:  



  Quote:
Originally posted by vkill at 2006-12-23 13:46:
wget的参数,baidu搜索很多的啊

wget -c -O
可以吗?

但我还是想知道怎么去循环下载.....

@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
::就是想让脚本回到这里,%%i这个值应该保持当前的值
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "无法显示网页" D:\%%i.htm >nul&& .................
)

[ Last edited by ka56 on 2006-12-23 at 01:59 PM ]

2006-12-24 02:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 12 楼』:  

主要想问循环怎么写~~~~

2006-12-24 03:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 13 楼』:  

@echo off
for /f "tokens=1,2" %%i in (D:\123.txt) do (
:标记
wget -O %%i.htm http://www.cn-dos.net/forum/viewpro.php?uid=%%i
sleep 3000
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
find "非正常的字符" D:\%%i.htm >nul&& 在这里GOTO到标记不行吧?
)

正常时:
find "中国DOS联盟论坛" D:\%%i.htm >nul&& echo %%i>>D:\正常.txt
到非正常时想重新下载,很多时候是需要重新下载的:
find "非正常的字符" D:\%%i.htm >nul&& 找到非正常的后要重新下怎么写???

这些代码对我比较重要,大虾抽空指导下吧...!

[ Last edited by ka56 on 2006-12-23 at 03:05 PM ]

2006-12-24 04:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 14 楼』:  

) 关于并发高速下载

普通循环方式下载很多网页(比如要下载几千个页面)会很慢,
建议 Start 出 30 或 100 个 CMD 同时下载(同时连入不同的页面下载),反正有的是内存,不用白不用。

而且宽带速度也快,但不可能下载一个页面就占满了你的带宽,而且当你连接网站指定要下某个页面时,还要等待那边数据库提取……

所以,同时进行 30 个任务,这样速度极快~:)
楼主可以试试用 Start 来模拟多任务并发更好玩~:)


) 关于是否继续等待 或是 多次重复下载那些没有正常连接网页

多次下载没有正常连接的页面,更耽误和影响还在列队中的任务。
所以建议楼主: 
        1) 不管有无正常下载的页面,都下载完了最后扫描有哪些没有下载,然后主要针对它们多次试下载。
        2) 下载,发现未正常连接或网页无法下载,判断并追加写入日志,最后重新下载日志中的网页。
           
根据上面模拟“多任务”原理,先下载,最后重新补那些没正常下载的页面,速度会非常快。


(以上只是个人想法,未经实验证明其可行性)

[ Last edited by redtek on 2006-12-23 at 03:24 PM ]



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-12-24 04:22
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
ka56
中级用户





积分 234
发帖 129
注册 2006-11-28
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by redtek at 2006-12-23 15:22:
) 关于并发高速下载

普通循环方式下载很多网页(比如要下载几千个页面)会很慢,
建议 Start 出 30 或 100 个 CMD 同时下载(同时连入不同砮..

谢谢兄弟的耐心,单个BAT不怕慢,要快可以多开几个,,,主要得完善脚本..对吗?
我需要下载的网页确实有上万个,考虑可能有网页故障或IP被封等因素,多次下载一个页面是必要的,所以我很想学怎么循环...这样一个BAT运行完后,所有的任务也执行完了~~不用在重试了~~

[ Last edited by ka56 on 2006-12-23 at 03:36 PM ]

2006-12-24 04:31
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: