标题: 再问一段循环的代码
[打印本页]
作者: ka56
时间: 2006-12-23 16:11
标题: 再问一段循环的代码
没办法,手中的活没做完,只能再发贴求助了,
主要思路:从一个文本里逐行提取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字符值重新下载怎么写?
)
没有基础搞很久都不成,请大虾们务必指导下,嘿嘿,明天再来看,谢谢>>>>>
作者: ka56
时间: 2006-12-23 22:55
再看下~~
作者: namejm
时间: 2006-12-24 02:08
顶楼的,请你把条件说得清楚一点,在关键的地方用模糊指代的语言是不可能让别人帮你想办法的。
请你至少把以下内容交代清楚:
1、一个文本?什么内容?具体格式?有何规律?
2、URL中的哪部分字符?
3、find关键字是什么?
4、提交字符给文本?什么样的字符?交给哪个文本?
缺少了以上任何一项,不可能写出任何一行代码。
作者: vkill
时间: 2006-12-24 02:11
如果遇到网络不好,无法显示页面就重新下载并识别,直到下载到有关键字的正常网页为止
这点可以用wget的自身参数实现
作者: vkill
时间: 2006-12-24 02:13
sleep 3000
这句没有起到什么作用,可以删除
作者: ka56
时间: 2006-12-24 02:21
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这些我自己来完成
不知斑斑明白了吗?对不起哦~~
作者: ka56
时间: 2006-12-24 02:26
Quote: |
Originally posted by vkill at 2006-12-23 13:13:
sleep 3000
这句没有起到什么作用,可以删除 |
|
是吗?主要是想提高代码的可靠性,想100%下载来,不要有无法显示的..
可以用wget的自身参数实现 ..
大虾指教下,非常之感谢!!!
作者: namejm
时间: 2006-12-24 02:30
1、请把你的 123.txt 内容张贴一部分出来,“上面那个%%i就是UID” 这样的说法对写代码没有任何帮助,说了也等于没说;
2、在没有见到 123.txt 的内容之前,你这样的说法没有任何意义,还是白说;
3、不发表任何意见;
4、你这样一说,我好象明白了些什么,但是我很快又什么也不明白了。
说到底,你还是不太明白请求别人帮助的时候,究竟该给别人提供些什么信息,请你站在解答问题这个角度来思考,想想该提供些什么信息。
作者: ka56
时间: 2006-12-24 02:36
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 ]
作者: vkill
时间: 2006-12-24 02:46
wget的参数,baidu搜索很多的啊
作者: ka56
时间: 2006-12-24 02:55
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 ]
作者: ka56
时间: 2006-12-24 03:11
主要想问循环怎么写~~~~
作者: ka56
时间: 2006-12-24 04:00
@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 ]
作者: redtek
时间: 2006-12-24 04:22
) 关于并发高速下载
普通循环方式下载很多网页(比如要下载几千个页面)会很慢,
建议 Start 出 30 或 100 个 CMD 同时下载(同时连入不同的页面下载),反正有的是内存,不用白不用。
而且宽带速度也快,但不可能下载一个页面就占满了你的带宽,而且当你连接网站指定要下某个页面时,还要等待那边数据库提取……
所以,同时进行 30 个任务,这样速度极快~:)
楼主可以试试用 Start 来模拟多任务并发更好玩~:)
) 关于是否继续等待 或是 多次重复下载那些没有正常连接网页
多次下载没有正常连接的页面,更耽误和影响还在列队中的任务。
所以建议楼主:
1) 不管有无正常下载的页面,都下载完了最后扫描有哪些没有下载,然后主要针对它们多次试下载。
2) 下载,发现未正常连接或网页无法下载,判断并追加写入日志,最后重新下载日志中的网页。
根据上面模拟“多任务”原理,先下载,最后重新补那些没正常下载的页面,速度会非常快。
(以上只是个人想法,未经实验证明其可行性)
[
Last edited by redtek on 2006-12-23 at 03:24 PM ]
作者: ka56
时间: 2006-12-24 04:31
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 ]
作者: ka56
时间: 2006-12-24 04:53
还是没有针对循环的修改,这两天感冒了,先去睡一下~....
作者: ka56
时间: 2006-12-24 06:42
这里的大虾一堆就没有看懂我的意思的?汗一个~~
作者: tianzizhi
时间: 2006-12-24 09:12
人家只是想知道当下载不能正确下载出现无法显示网页时再次循环下面这句下载语句:
wget -O %%i.htm
http://www.cn-dos.net/forum/viewpro.php?uid=%%i
想出怎么循环这句就行了,跟了这多贴竟没有一个写出楼主要求怎么循环这句的,都贴一些楼主不想要的东西,我也汗..难怪楼主感叹了.........
[
Last edited by tianzizhi on 2006-12-24 at 09:28 AM ]
作者: tianzizhi
时间: 2006-12-24 09:27
我想想方法
[
Last edited by tianzizhi on 2006-12-24 at 09:52 AM ]
作者: ka56
时间: 2006-12-24 09:54
Quote: |
Originally posted by tianzizhi at 2006-12-23 20:27:
我想想方法
[ Last edited by tianzizhi on 2006-12-24 at 09:52 AM ] |
|
太感谢了!!!!
刚才那个会自己退出... : ))
作者: tianzizhi
时间: 2006-12-24 10:19
%%a变量在:go 是不行的,我一直再试着怎么让它在:go里有用,我试了许多,最后多用一变量解决了,你试试吧
@echo off
for /f "tokens=1,2" %%a in (D:\123.txt) do (
set tianzi=%%a
:go
wget -O %tianzi%.htm
http://www.cn-dos.net/forum/viewpro.php?uid=%tianzi%
sleep 3000
find "中国DOS联盟论坛" D:\%tianzi%.htm >nul && echo %tianzi%>>D:\正常.txt
find "无法显示网页" D:\%tianzi%.htm >nul && del d:\%tianzi%.htm /f && goto go
)
[
Last edited by tianzizhi on 2006-12-24 at 10:40 AM ]
作者: tianzizhi
时间: 2006-12-24 10:43
还有一点要告诉你,就是用wget 下载这样的连接会出错:
http://www.cn-dos.net/forum/viewpro.php?uid=45
需要用哪个参数能下载这样的链接,我也不清楚
我只会用wget 下载这样的链接((后缀为.htm):
http://www.hxitz.com/Edu/Arts/jisuanjixitong.html
[
Last edited by tianzizhi on 2006-12-24 at 10:46 AM ]
作者: ka56
时间: 2006-12-24 10:44
Quote: |
Originally posted by tianzizhi at 2006-12-23 21:19: |
|
不知我有没有复制错,,%tianzi%这时的值是空的吧?您再试下~~
[
Last edited by ka56 on 2006-12-23 at 09:46 PM ]
作者: tianzizhi
时间: 2006-12-24 10:52
所以你需要正确用wget才行,才不会出错,我的代码测试过没错的,简单测试原代码为:@echo off
for %%a in (c) do (
set b=%%a
:go
dir %b%:\zh.bt /s
goto go
)
你看一下wget的参数,哪个是支持你所说的那样类型链接的,或curl试一试.
作者: namejm
时间: 2006-12-24 10:53
不是我们太菜,而是楼主想说的却没说明白。