|
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
状态 离线
|
|
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
状态 离线
|
|
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 |
|