标题: [网络连接] [已解决]批处理怎样获取多个网址或IP所对应的网页标题并输出结果? [打印本页]
作者: wh1234567 时间: 2011-4-25 14:48 标题: [已解决]批处理怎样获取多个网址或IP所对应的网页标题并输出结果?
本帖最后由 pcl_test 于 2016-7-14 12:17 编辑
批处理能不能批量获取按行排序的域名或IP所对应的网页标题并将结果输出?
就是有好多个网址,为了日后忘记每个网站到底是关于啥类型的网站,所以用此方法将他的网页标题自动附加到对应的网址后面,这样日后只要看一下标题就知道哪个是我目前想访问的网站了。
Batcher 管理员您好,很感谢您的回答,这个批处理不能在线获取到网址所对应的网页标题啊,是不是哪里需要修改?
作者: namejm 时间: 2011-4-25 15:07
论坛严禁发表“如题”内容的帖子
请认真阅读总版规。
作者: hanyeguxing 时间: 2011-4-25 15:37
楼主,请以具体示例说明意图。。。
作者: wh1234567 时间: 2011-4-25 15:52
就是有好多个网址,为了日后忘记每个网站到底是关于啥类型的网站,所以用此方法将他的网页标题自动附加到对应的网址后面,这样日后只要看一下标题就知道哪个是我目前想访问的网站了,
作者: Batcher 时间: 2011-4-25 19:57
4# wh1234567
能否把这些背景描述更新到顶楼?
作者: Batcher 时间: 2011-4-25 20:12
- @echo off
- more +8 "%~f0" >GetUrlText.vbs
- (for /f %%a in (a.txt) do (
- echo,%%a
- cscript //nologo GetUrlText.vbs %%a | findstr "<title>.*</title>"
- ))>b.txt
- goto :eof
-
- strURL=WScript.Arguments(0)
- WScript.Echo strURL
- Set objXmlHttp = CreateObject("Microsoft.XMLHTTP")
- objXmlHttp.Open "GET",strURL,0
- objXmlHttp.Send()
- Set objStream = CreateObject("ADODB.Stream")
- objStream.Mode = 3
- objStream.Type = 1
- objStream.Open()
- objStream.Write(objXmlHttp.responsebody)
- objStream.Position = 0
- objStream.Type = 2
- objStream.Charset = "gbk"
- strText = objStream.Readtext
- WScript.Echo strText
复制代码
a.txt的内容如下:- http://bbs.bathome.net
- http://bbs.chinaunix.net
复制代码
作者: wh1234567 时间: 2011-4-26 20:50
6# Batcher
Batcher 管理员您好,很感谢您的回答,这个批处理不能在线获取到网址所对应的网页标题啊,是不是哪里需要修改?
作者: Batcher 时间: 2011-4-26 21:17
7# wh1234567
什么是“在线获取到网址所对应的网页标题”?
作者: applba 时间: 2011-4-26 23:49
8# Batcher
你如你来到www.bathome.net
浏览器标题会变成批处理之家
作者: Batcher 时间: 2011-4-27 01:10
9# applba
你确定楼主的需求是这样的吗?
为何不把网址保存到一个文件里批量处理呢?
作者: wh1234567 时间: 2011-4-27 14:17
例如文本内容有多个网址按行排序:
http://www.bathome.net/
www.hao123.com
...
需要一个批处理,执行这个批处理后,自动在线获取互联网上的这些网站的网页标题并输出到另外的一个文本里,或者直接添加到对应的网址行后面。
处理结果例如:
http://www.bathome.net/ 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz!
www.hao123.com hao123--我的上网主页
也就是获取对应网页的<title> </title>之间的文字
作者: Batcher 时间: 2011-4-27 17:01
11# wh1234567 - @echo off
- more +10 "%~f0" >GetUrlText.vbs
- (for /f %%a in (a.txt) do (
- set /p ="%%a "<nul
- for /f "tokens=2 delims=<>" %%h in ('cscript //nologo GetUrlText.vbs %%a ^| findstr "<title>.*</title>"') do (
- echo,%%h
- )
- ))>b.txt
- goto :eof
-
- strURL=WScript.Arguments(0)
- WScript.Echo strURL
- Set objXmlHttp = CreateObject("Microsoft.XMLHTTP")
- objXmlHttp.Open "GET",strURL,0
- objXmlHttp.Send()
- Set objStream = CreateObject("ADODB.Stream")
- objStream.Mode = 3
- objStream.Type = 1
- objStream.Open()
- objStream.Write(objXmlHttp.responsebody)
- objStream.Position = 0
- objStream.Type = 2
- objStream.Charset = "gbk"
- strText = objStream.Readtext
- WScript.Echo strText
复制代码
作者: wh1234567 时间: 2011-4-27 23:13
12# Batcher
还是不行,是不是需要配合第三方程序才可以达到目的呢?我的意思是在不打开网页的前提下,只要执行这个批处理就可以获取到这些网址的网页标题。
作者: Batcher 时间: 2011-4-28 01:13
13# wh1234567
不行的具体表现是?
我这里是行的
作者: wh1234567 时间: 2011-4-28 01:15
不能实现获取网址标题
作者: wh1234567 时间: 2011-4-28 13:27
原文本内容例如:
http://bbs.bathome.net
http://bbs.chinaunix.net
http://www.onlinedown.net/
http://www.9ku.com/
不能完全获取,
获取结果:
http://bbs.bathome.net
<title> 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz!</title>
http://bbs.chinaunix.net
<title>论坛首页 - 中国最大的Linux/Unix技术社区 - IT人的网上社区 - bbs.ChinaUnix.net</title>
http://www.onlinedown.net/
http://www.9ku.com/
<title>九酷音乐网|好听的歌|网络歌曲|QQ音乐|流行歌曲大全</title>
能不能将<title></title>去除,将标题直接附加到相对应的每行后面并用空格分开,例如
http://bbs.bathome.net 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz!
http://bbs.chinaunix.net 论坛首页 - 中国最大的Linux/Unix技术社区 - IT人的网上社区 - bbs.ChinaUnix.net
http://www.onlinedown.net/
http://www.9ku.com/ 九酷音乐网|好听的歌|网络歌曲|QQ音乐|流行歌曲大全
作者: Batcher 时间: 2011-4-28 14:27
16# wh1234567
12楼的代码你真的试过?
作者: wh1234567 时间: 2011-4-28 15:13
本帖最后由 wh1234567 于 2011-4-28 15:27 编辑
试过,有个别地址不能获取标题例如:http://www.onlinedown.net
不含有http://的网址域名或IP地址例如 [url]www.9ku.com 能不能?尽量弄成通用的那种,例如带http://和不带http://的网址以及IP地址以及后面带不带/都可以处理获取的那种
原文本内容例如:
http://bbs.bathome.net/
http://www.onlinedown.net
www.9ku.com/
bbs.chinaunix.net
http://22.34.33.22/
3.2.2.54/
253.67.1.153
作者: wh1234567 时间: 2011-4-28 16:50
本帖最后由 wh1234567 于 2011-4-28 16:52 编辑
17# Batcher
试过,有个别地址不能获取标题例如:http://www.onlinedown.net
不含有http://的网址域名或IP地址例如 www.9ku.com 能不能?尽量弄成通用 ...
原文本内容例如:
http://www.onlinedown.net
www.9ku.com/
bbs.chinaunix.net
http://22.34.33.22/
3.2.2.54/
253.67.1.153
作者: wh1234567 时间: 2011-4-29 01:04
另外能不能实现多线程获取地址对应的网页标题?这样速度可能要快很多而且比较准确获取到,发现有个别网址不能获取到网页标题,其实这个网页是有标题的,不知道为什么?是不是这样用批处理获取不太稳定?还是代码需要修改一下?请求版主与管理帮我看看
作者: Batcher 时间: 2011-4-29 12:42
20# wh1234567 - @echo off
- setlocal enabledelayedexpansion
- more +12 "%~f0" >GetUrlText.vbs
- (for /f %%a in (a.txt) do (
- set strURL=%%a
- set strURL=!strURL:http://=!
- for /f "tokens=4 delims=<>" %%b in ('cscript //nologo GetUrlText.vbs http://!strURL! ^| findstr /i "<title>.*</title>"') do (
- echo,%%a %%b
- )
- ))>b.txt
- goto :eof
-
- Set objDOM = WScript.GetObject(WScript.Arguments(0))
- Do Until objDOM.ReadyState = "complete"
- WScript.Sleep 200
- Loop
- WScript.Echo objDOM.DocumentElement.OuterHTML
复制代码
作者: wh1234567 时间: 2011-4-29 14:52
本帖最后由 wh1234567 于 2011-4-29 18:46 编辑
21# Batcher
不错,就是有点慢,不知道能不能多线程快点,另外能不能就像下面这样的格式的文本内容,只识别前面的网址并获取网页标题,最后将标题附加到对应的行后面,不能获取标题的自动跳过并保留原网址行
原文本内容例如:
http://bbs.bathome.net/,最好的论坛、批处理学习之地。
http://www.onlinedown.net,最安全的下载网,2011,
www.9ku.com/ 歌曲,gequ,
34dvv.chinaunix.net\yeshi,lt
bg.cdsc.rtett.fgg.com,例如,多级域名
http://22.34.33.22/,转换,ip地址
3.2.2.54/,无效,可能
253.67.1.153,dabukai,bukan30
处理后输出文本为:(也就是只识别前面的网址,并将获取的网页标题附加到每行地址对应的最后面,如果网址无效则跳过并保留原行)
http://bbs.bathome.net/,最好的论坛、批处理学习之地。 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz!
http://www.onlinedown.net,最安全的下载网,2011, 华军软件园-提供国内外最新免费软件、共享软件下载及发布的软件下载站,软件资讯、技巧、评测、教程等相关软件资讯!
www.9ku.com/ 歌曲,gequ, 九酷音乐网|好听的歌|网络歌曲|QQ音乐|流行歌曲大全
34dvv.chinaunix.net\yeshi,lt 论坛首页 - 中国最大的Linux/Unix技术社区 - IT人的网上社区 - bbs.ChinaUnix.net
bg.cdsc.rtett.fgg.com,例如,多级域名 例如演示
http://22.34.33.22/,转换,ip地址
3.2.2.54/,无效,可能
163.22.58.2,dabukai,bukan30 南投县平和国小
作者: Batcher 时间: 2011-4-29 15:40
22# wh1234567 - @echo off
- setlocal enabledelayedexpansion
- more +21 "%~f0" >GetURLText.vbs
- (for /f %%a in (a.txt) do (
- echo "%%a" | findstr "www" > null || echo "%%a" | findstr "bbs" > null
- if !errorlevel! neq 0 (
- echo %%a
- ) else (
- set strLine=%%a
- set strLine=!strLine:http://=!
- for /f "tokens=1 delims=,\/ " %%b in ("!strLine!") do (
- set strURL=%%b
- )
- for /f "tokens=4 delims=<>" %%c in ('cscript //nologo GetURLText.vbs http://!strURL! ^| findstr /i "<title>.*</title>"') do (
- echo,%%a %%c
- )
- )
- pause
- ))>b.txt
- goto :eof
-
- Set objDOM = WScript.GetObject(WScript.Arguments(0))
- Do Until objDOM.ReadyState = "complete"
- WScript.Sleep 200
- Loop
- WScript.Echo objDOM.DocumentElement.OuterHTML
复制代码
作者: wh1234567 时间: 2011-4-29 16:33
本帖最后由 wh1234567 于 2011-4-29 16:34 编辑
23# Batcher
好像效果不太理想,是不是需要修正一下,网址也许有三级或四级的域名的话那就没法获取标题了吧,另外能不能解决速度慢的问题,如果开多线程的话也许速度更快
作者: Batcher 时间: 2011-4-29 17:13
24# wh1234567
“好像”是多像?
哪个网址获取失败了?
作者: wh1234567 时间: 2011-4-29 18:43
本帖最后由 wh1234567 于 2011-4-29 20:49 编辑
25# Batcher
只获取到第一个,然后就没有反应了,一直不变
结果文本:
http://bbs.bathome.net/,最好的论坛、批处理学习之地。 批处理之家 ─ 做最实用的批处理论坛 - Powered by Discuz
请按任意键继续. . .
pause
))>b.txt
goto :eof
pause是不是应该放在goto :eof的后面呢
另外遇到好几级域名的网址就无法获取标题了,例如:f2bzx1.j2d.ed33u.sh.cn
作者: Batcher 时间: 2011-4-29 20:47
26# wh1234567
你的测试数据贴出来看看
作者: wh1234567 时间: 2011-4-29 20:51
可能需要重新修改一下代码了,否则多级域名的网址就无法获取到标题了
作者: Batcher 时间: 2011-4-29 20:55
28# wh1234567
没有测试数据怎么改代码?
作者: wh1234567 时间: 2011-4-29 21:09
本帖最后由 wh1234567 于 2011-4-30 11:21 编辑
29# Batcher
http://bbs.bathome.net/,最好的论坛、批处理学习之地。
http://www.onlinedown.net,最安全的下载网,2011,
www.9ku.com/ 歌曲,gequ,
112.34dvv.chinaunix.net\yeshi,lt
bg.cdsc.rtett.fgg.cn,例如,多级域名
d.44.5.hu.com,新的,227888
http://22.34.33.22/,转换,ip地址
3.2.2.54/,无效,可能
253.67.1.153,dabukai,bukan30
w22.sdsdg.sdkn.gov.cn,juli,shuoming
www.nnhft.dgfg5.ssd432.gov.cn,lizi,zhhzgzhffr45
文本里的网址比较多,且域名后缀与前缀多种格式的,例如com,cn,net,gh,等等任意格式的,前面也不一定带有www,有可能是其他的字母或数字的。域名等级也不一定就是一级或二级有可能是四级五级或更多。
我发现不带有www的多级域名地址无法获取到网页标题
作者: Batcher 时间: 2011-4-29 21:44
30# wh1234567
如果你愿意贴出真实数据的话,我非常乐意继续修改代码。
如果你不肯的话,让我们一起等待其他朋友来帮你吧。
Good luck.
作者: wh1234567 时间: 2011-4-29 23:25
31# Batcher
管理员您好,我的意思是文本不一定就是一个,所以不能只按照我提供的样板文本做批处理,尽量支持带有www和不带有www的任意网址的那种,如果你只是按照我给你的文本制作的话,当过日后这个批处理也就不一定通用了啊
作者: Batcher 时间: 2011-4-30 09:41
32# wh1234567
改代码很容易,但我说的很清楚了,如果你随便编造一些网址的话,我也没有兴趣再改下去了。
作者: CrLf 时间: 2011-4-30 11:36
批处理之所以能够“批处理”,是因为它顺应了变化的规律,若不存在规律,批处理甚至还不如手工操作。
楼主自己都不明白有什么规律,而且又不给出有代表性的测试环境,准备让别人玩扫雷么?
作者: wh1234567 时间: 2011-4-30 14:12
http://bbs.bathome.net/,最好的论坛、批处理学习之地。
http://www.onlinedown.net,最安全的下载网,2011,
www.9ku.com/ 歌曲,gequ,
112.34dvv.chinaunix.net\yeshi,lt
bg.cdsc.rtett.fgg.cn,例如,多级域名
d.44.5.hu.com,新的,227888
http://22.34.33.22/,转换,ip地址
3.2.2.54/,无效,可能
253.67.1.153,dabukai,bukan30
sddfsfw22.sdsdg.sdkn.gov.cn,juli,shuoming
www.nnhft.dgfg5.ssd432.gov.cn,lizi,zhhzgzhffr45
文本里的网址比较多,且域名后缀与前缀多种格式的,例如com,cn,net,gh,等等任意格式的,前面也不一定带有www,有可能是其他的字母或数字的。域名等级也不一定就是一级或二级有可能是四级五级或更多。
作者: wh1234567 时间: 2011-4-30 15:28
本帖最后由 wh1234567 于 2011-4-30 16:19 编辑
23# Batcher
这个批处理为什么不能将无效的网址跳过并保留原行并输出呢?例如
d.ghfgfhgh.com,shide,en
ms.34nvfdgf,shide,en
dos窗口里显示如下内容,不知道为什么:
C:\Documents and Settings\Administrator\桌面\GetURLText.vbs(1, 1) Microsoft VBSc
ript 运行时错误: Automation 操作中文件名或类名未找到
C:\Documents and Settings\Administrator\桌面\GetURLText.vbs(1, 1) Microsoft VBSc
ript 运行时错误: Automation 操作中文件名或类名未找到
FINDSTR: 行 1703 太长。
另外:
GetURLText.vbs和null这2个文件最后怎么del 不掉啊
另外,要处理的文本文件名只支持英文,能不能支持中英文的那种
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |