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

[文本处理] 【已解决】求助BAT如何批量获取网页的标题(title)和描述(description)?

本帖最后由 hotkean 于 2015-11-17 09:22 编辑

我现在有个文本a.txt  里面有N行URL网址,如何批处理实现导出每个URL的标题呢并且保存为a-title.txt
如a.txt内网址为
http://www.bathome.net
https://www.qq.com/
导出a-title.txt内容为:
批处理之家 批处理_BAT_CMD_DOS_VBS_Perl_Python_PowerShell - Powered by Discuz!
腾讯首页

顺便再求助一下大家,导出网站description的文本文件a-des.txt的批处理,一并多谢了!
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 pcl_test 于 2015-11-12 12:52 编辑
  1. //&cls&cscript -nologo -e:jscript "%~f0"<"url列表.txt"&pause&exit /b
  2. function BintoStr(strBin,strCharset){
  3.     var stream = new ActiveXObject('ADODB.Stream')
  4.     stream.Type = 1
  5.     stream.Mode = 3
  6.     stream.Open()
  7.     stream.Write(strBin)
  8.     stream.Position = 0
  9.     stream.Type = 2
  10.     stream.Charset = strCharset
  11.     return stream.ReadText
  12. }
  13. function getHtmlTxt(strURL){
  14.     var http = new ActiveXObject('Msxml2.XMLHTTP');
  15.     try{
  16.         http.open('GET', strURL, false);
  17.         http.send();
  18.         var m = http.GetResponseHeader('Content-Type').match(/charset\s?=\s?([^\s;]+)/i);
  19.         if (m){
  20.             var contenttype = m[0].replace(/charset\s?=\s?/,'');
  21.             var HtmlText = BintoStr(http.ResponseBody,contenttype);
  22.             return HtmlText;
  23.         }
  24.         else{
  25.             var m = http.ResponseText.match(/<\s?meta.+?charset\s?=\s?[^\s\"]+/i);
  26.             if (m){
  27.                 var contenttype = m[0].replace(/.+?charset\s?=\s?/,'');
  28.                 var HtmlText = BintoStr(http.ResponseBody,contenttype);
  29.                 return HtmlText;
  30.             }
  31.             else return http.ResponseText;
  32.         }
  33.      }catch (e){}
  34. }
  35. //var fso = new ActiveXObject('Scripting.Filesystemobject');
  36. var url = WScript.StdIn.ReadAll().split(/\s/);
  37. var s = '';
  38. for (var i=0; i<url.length; i++)
  39. {
  40.     var txt = getHtmlTxt(url[i]);
  41.     if (!txt)
  42.         s += url[i]+'\r\n拒绝访问\r\n\r\n';
  43.     else{
  44.         var title = /<title>([^<]+)<\/title>/i.exec(txt);
  45.         var description = txt.match(/<\s?meta[^>]+?description[^>]*?>/i);
  46.         if (title)
  47.             var titlestr = title[1];
  48.         else var titlestr = 'not found';
  49.         if (description)
  50.             var descriptionstr = description[0].replace(/.+?content\s?=\s?"([^"]+)".+/i, '$1');
  51.         else var descriptionstr = 'not found';
  52.         s += url[i]+'\r\ntitle:'+titlestr+'\r\ndescription:'+descriptionstr+'\r\n\r\n';
  53.     }
  54. }
  55. WSH.echo(s);
复制代码

TOP

多谢,如果是想把标题和描述分别导出为 a-title.txt 和 a-description.txt 两个文件(一行一行模式)  代码又应该如何修改呢?

TOP

回复 3# hotkean

38行开始替换
  1. var fso = new ActiveXObject('Scripting.Filesystemobject');
  2. var url = WScript.StdIn.ReadAll().split(/\s/);
  3. var titlestr = descriptionstr = '';
  4. for (var i=0; i<url.length; i++)
  5. {
  6.     var txt = getHtmlTxt(url[i]);
  7.     if (txt) {
  8.         var title = /<title>([^<]+)<\/title>/i.exec(txt);
  9.         var description = txt.match(/<\s?meta[^>]+?description[^>]*?>/i);
  10.         if (title)
  11.              titlestr += title[1]+'\r\n';
  12.         else titlestr += 'not found\r\n';
  13.         if (description)
  14.             descriptionstr += description[0].replace(/.+?content\s?=\s?"([^"]+)".+/i, '$1')+'\r\n';
  15.         else descriptionstr += 'not found\r\n';
  16.     }
  17.     else{
  18.         titlestr += 'access forbidden\r\n';
  19.         descriptionstr += 'access forbidden\r\n';
  20.     }
  21. }
  22. fso.CreateTextFile('title.txt',2).Write(titlestr);
  23. fso.CreateTextFile('description.txt',2).Write(descriptionstr);
复制代码
1

评分人数

TOP

返回列表