Board logo

标题: [网络连接] [已解决]批处理如何批量下载百度搜索结果中的每条链接指向的网页? [打印本页]

作者: lxh623    时间: 2015-6-10 16:40     标题: [已解决]批处理如何批量下载百度搜索结果中的每条链接指向的网页?

本帖最后由 pcl_test 于 2016-9-4 13:37 编辑

我想把下面网页的链接网页的内容分别下载到各自的文本文件里面。请大侠帮忙!
主要是方法。谢谢!
第一,如果一步就更好了。以文章名命名的614个文本。
第二,分步骤。先是下载html。我获得了614个地址,都不会下载。因为涉及到打开网页、再转接。比如,
http://www.baidu.com/link?url=-- ... 9ehPhagSu1agKSnekya
然后,转换为文本。[这一步,论坛有个软件HtoX32c,好像可以用。]
再修改文本(提取中间的文章内容),最后,还要命名。
就是在百度https://www.baidu.com/ 搜索,title: (管理) sitewww.fjdh.cn)
抱歉,粘贴网址总是不行。
https://www.baidu.com/s?ie=utf-8 ... 7%90%86)%20site%3A()&rsv_pq=92b4ae0300000efa&rsv_t=e0071a9cFmVCoLRcSG3%2FEIvqaWUkaOSPqjCn8ujzlqSv8xLeFP%2BOi3th7A9c0Jc&rsv_enter=0&rsv_sug3=2&rsv_sug1=1&inputT=2893&rsv_sug4=5176[/url]
作者: bailong360    时间: 2015-6-10 18:57

就是下载百度搜索结果里的各个页面?
作者: aa77dd@163.com    时间: 2015-6-10 19:41

试着用下 teleport ultra 和 jsdom
作者: lxh623    时间: 2015-6-10 20:29

就是下载百度搜索结果里的各个页面?
bailong360 发表于 2015-6-10 18:57

是的.谢谢!
作者: bailong360    时间: 2015-6-10 21:32

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. wget -O tmp "http://www.baidu.com/s?wd=title:管理 site:www.fjdh.cn"
  4. cscript //nologo .\UTF-8.vbs tmp
  5. >url grep -oP "(?<=\"url\":\")..*?(?=\")" tmp_ansi
  6. >title grep -oP "(?<=title\":\")..*?(?=\")" tmp_ansi
  7. (for /f "delims=" %%i in (title) do (
  8.   set title=%%i
  9.   echo !title::=:!))>title2
  10. (for /f "delims=" %%i in ('findstr . url') do (
  11.   set title=
  12.   set /p title=
  13.   wget -O !title!.html "%%i"
  14. ))<title2
  15. del tmp,tmp_ansi,url,title,title2
  16. pause
复制代码
符合要求否?
第三方见签名
作者: lxh623    时间: 2015-6-10 21:38

已经解决第一步,我是用了老的flashget。可以下载。第二步,也如上解决。
新的问题,就成了,怎样提取特征字符串之间的文本,并且把文件以最前面一行命名。614个文件,批量操作。
字符串是“>>正文内容”和“没有相关内容”。
谢谢!
作者: lxh623    时间: 2015-6-10 21:47

符合要求否?
第三方见签名
bailong360 发表于 2015-6-10 21:32

谢谢!
wget是不是需要下载?
作者: bailong360    时间: 2015-6-10 22:08

回复 7# lxh623
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in ('dir /b *.txt') do (
  4. (for /f "delims=" %%j in (%%~si) do (
  5. if "%%j"=="没有相关内容" set start=1
  6. if "!start!"=="0" echo;%%j
  7. if "%%j"==">>正文内容" set start=0
  8. ))>"New_%%~nxi"
  9. )
复制代码
是的,签名档中给出了下载地址
作者: lxh623    时间: 2015-6-11 07:23

回复  lxh623 是的,签名档中给出了下载地址
bailong360 发表于 2015-6-10 22:08

谢谢!
我没有看到wget。您帮我看看?
作者: bailong360    时间: 2015-6-11 11:26

回复 9# lxh623
直接输入wget.exe
作者: lxh623    时间: 2015-6-11 15:02

cscript //nologo .\UTF-8.vbs
在哪里?
谢谢!
作者: apang    时间: 2015-6-13 00:07

本帖最后由 apang 于 2015-6-13 14:01 编辑

保存为test.bat,需要先下载HtoX32c.exe与批处理放在一起,处理后的txt为ansi编码
  1. @set @n=0;/* & echo off
  2. md Result 2>nul
  3. pushd Result\
  4. cscript -nologo -e:jscript "%~0"
  5. "%~dp0HtoX32c" /IP /O0 *.html 2>nul
  6. del *.html
  7. pause & exit/b & rem */
  8. var url = "http://www.baidu.com/s?wd=title:管理 site:www.fjdh.cn&pn=";
  9. var intTotal = 0;
  10. var re = /"title":"(.+?)","url":"(.+?)"/ig;
  11. //获取百度搜索结果中第1~61页的标题、地址,以标题名称作为html文件名
  12. for(var i=0; i<61; i++){
  13.         var http = new ActiveXObject("MSXML2.ServerXMLHTTP");
  14.         try {
  15.                 http.open("GET", url + i*10, false);
  16.                 http.send();
  17.                 var s = GetText(http.responseBody);
  18.                 while((arr = re.exec(s)) != null){
  19.                         http.open("GET", arr[2], false);
  20.                         http.send();
  21.                         SaveFile(http.responseBody, arr[1]);
  22.                 }
  23.         } catch(e) {WScript.Echo(e.message)}
  24.         http = null;
  25. }
  26. function GetText(bin){
  27.         with(new ActiveXObject("ADODB.Stream")){
  28.                 Mode = 3;
  29.                 Type = 1;
  30.                 Open();
  31.                 Write(bin);
  32.                 Position = 0;
  33.                 Type = 2;
  34.                 CharSet = "UTF-8";
  35.                 return ReadText()
  36.         }
  37. }
  38. //下载、保存html文件
  39. function SaveFile(bin, strName){
  40.         strName = strName.replace(/[\/\|\\:<>\?\*]/g, ""); //格式化文件名
  41.         var fso = new ActiveXObject("Scripting.FileSystemObject");
  42.         if(fso.FileExists(strName + ".html")) {return ""} else intTotal+=1;
  43.         WScript.Echo((intTotal+1000+"").substr(1) + " " + strName + ".html");
  44.         with(new ActiveXObject("ADODB.Stream")){
  45.                 Mode = 3;
  46.                 Type = 1;
  47.                 Open();
  48.                 Write(bin);
  49.                 Position = 0;
  50.                 Type = 2;
  51.                 CharSet = "UTF-8";
  52.                 //保留“正文内容”到“标签:”之间的内容
  53.                 var txt = ReadText().replace(/[\s\S]+>正文内容<.*\n/, "").split(">标签:<")[0];
  54.                 txt = txt.replace(/&[a-z]+;/g, ""); //删除导致乱码的字符
  55.                 Position = 0;
  56.                 CharSet = "GBK";
  57.                 WriteText(txt);
  58.                 SetEOS;
  59.                 SaveToFile(strName + ".html", 2);
  60.         }
  61. }
复制代码

作者: lxh623    时间: 2015-6-13 04:53

保存为test.bat,需要先下载HtoX32c.exe与批处理放在一起,处理后的txt为ansi编码
apang 发表于 2015-6-13 00:07

怎样一次获得614个?或者别的搜索的全部结果。
谢谢!
作者: apang    时间: 2015-6-13 14:04

回复 13# lxh623


    已修改
试了下,百度搜索结果最多61页,每页10个html文件,去掉重复后结果为580个
作者: lxh623    时间: 2015-6-14 11:09

本帖最后由 lxh623 于 2015-6-14 11:10 编辑

回复 14# apang
有些没有下载到,不知道是为什么。比如:
从玄奘取经看唐代的出入境管理制度(还是最好在百度搜索,再打开。)
四川省人民代表大会常务委员会关于修改《四川省宗教事务管理条例》的决定
国家宗教事务局令第9号 《关于修订中华人民共和国境内外国人宗教活动管理规定实施细则的决定》
寺院品牌战略管理刍议

我自己用firefox插件outwit分析链接,手动保留含有“link?url=”的,然后用快车下载的。见下面。

http://pan.baidu.com/s/1sj80425

谢谢!
作者: apang    时间: 2015-6-15 02:12

回复 15# lxh623


    有几个文件没有下载可能与网络有关,也可能代码有缺陷,具体不清楚。

如果仅仅是html转换成txt,可以这样:
PS: HtoX32c 对文件名长度有限制,如果文件名过长直接退出。刚开始转换一直不成功,找好久才发现这个问题。
  1. @set @n=0;/* & echo off
  2. pushd HTML\
  3. dir /b *.html *.aspx|cscript -nologo -e:jscript "%~0"
  4. "%~dp0HtoX32c" /IP /O0 *.$
  5. del *.$
  6. pause & exit/b & rem */
  7. var fso = new ActiveXObject("Scripting.FileSystemObject");
  8. while(!WScript.StdIn.AtEndOfStream){SaveFile(WScript.StdIn.ReadLine())}
  9. function SaveFile(file){
  10.         var i = 0;
  11.         with(new ActiveXObject("ADODB.Stream")){
  12.                 Mode = 3;
  13.                 Type = 2;
  14.                 CharSet = "UTF-8";
  15.                 Open();
  16.                 LoadFromFile(file);
  17.                 var txt =  ReadText().replace(/[\s\S]+>正文内容<.*\n/, "").split(">标签:<")[0];
  18.                 txt = txt.replace(/&[a-z]+;/g, "");
  19.                 var name = txt.match(/<h1>(.+?)<\/h1>/i)[1];
  20.                 name = name.replace(/[\/\|\\:"<>\?\*]/g, "").replace(/(.{128}).*/, "$1");
  21.                 var newname = name;
  22.                 while(fso.FileExists(newname + ".$")){
  23.                         i++;
  24.                         newname = name + "[" + i + "]";
  25.                 }
  26.                 Position = 0;
  27.                 CharSet = "GBK";
  28.                 WriteText(txt);
  29.                 SetEOS;
  30.                 SaveToFile(newname + ".$");
  31.         }
  32. }
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2