Board logo

标题: 【完结】求抓信息的批处理+100元 [打印本页]

作者: lxh623    时间: 2021-10-17 08:39     标题: 【完结】求抓信息的批处理+100元

本帖最后由 lxh623 于 2021-10-23 07:36 编辑

http://www.bathome.net/thread-60199-1-1.html
这个15楼的批处理有效,但是,每一次都抓不全。(我在背后运行了定时清除缓存的软件。)
我的文本是b(每一行都是电视剧名称),批处理名字是“电视猫剧情”,结果是“info”。文本“pass”记录了b的执行个数。
info的内容如下:
  1. 名称: 辛追传奇
  2. --------------------------------------------------
  3. 名称: 创
  4. 第1集
复制代码
希望的事情是:
第一步,运行批处理“电视猫剧情”。
第二步,批处理运行完了,info里面名称下面一行行首有第1集的,把名称,比如“创”到文本“b”里面删除那一行(完全一样的内容)。
第三步,文本b修改完毕,删除文本“pass”。停留五分钟。
第四步,重复上面步骤。除非手动停止。

谢谢!
作者: zaqmlp    时间: 2021-10-17 17:02

  1. <# :
  2. cls&echo off&mode con lines=5000
  3. rem bat及txt存为ANSI编码
  4. cd /d "%~dp0"
  5. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  6. pause
  7. exit
  8. #>
  9. $listfile="电视剧名称.txt";
  10. $startfile="记录.txt";
  11. $resultfile="结果.txt";
  12. $okfile="有效.txt";
  13. $nofile="无效.txt";
  14. $minilen=150;
  15. $timeout=900;
  16. if(-not (test-path -liter $listfile)){write-host ('"'+$listfile+'" 未找到');exit;};
  17. $enc=[Text.Encoding]::GetEncoding('GB2312');
  18. function gethtml($u){
  19.     $content='';
  20.     for($j=1;$j -le 3;$j++){
  21.         try{
  22.             $http=New-Object -ComObject 'Msxml2.XMLHTTP';
  23.             $http.Open('GET', $u, $false);
  24.             $http.SetRequestHeader('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38');
  25.             $http.SetRequestHeader('Host','www.tvmao.com');
  26.             $http.SetRequestHeader('Connection','Keep-Alive');
  27.             $http.Send();
  28.             $content=[System.Text.Encoding]::UTF8.GetString($http.ResponseBody);
  29.             $http.abort();
  30.             break;
  31.         }catch{
  32.             write-host ('第'+$j.toString()+'次获取网页源码失败');
  33.             start-sleep -Seconds 3;
  34.         }
  35.     }
  36.     return $content;
  37. }
  38. function searchname($w, $f, $s){
  39.     $arr=New-Object -TypeName System.Collections.ArrayList;
  40.     $searchurl='https://www.tvmao.com/servlet/queryobject?type=all&term='+[System.Net.WebUtility]::UrlEncode($w);
  41.     while(1){
  42.         $content=gethtml $searchurl;
  43.         if(-not $content.Contains('503 Service Temporarily Unavailable')){
  44.             $m=[regex]::matches($content, '\{[^\}]*?"name":"([^"]+?)","typeId":11,"url":"([^"]+?)"[^\}]*?\}');
  45.             foreach($it in $m){
  46.                 if($f -eq $true){
  47.                     if($it.groups[1].value.replace(':',':') -eq $w.replace(':',':')){
  48.                         $item=$it.groups[1].value+'|'+$it.groups[2].value;
  49.                         [void]$arr.add($item);
  50.                     }
  51.                 }else{
  52.                     $item=$it.groups[1].value+'|'+$it.groups[2].value;
  53.                     [void]$arr.add($item);
  54.                 }
  55.             }
  56.             break;
  57.         }
  58.         start-sleep -Seconds $s;
  59.     }
  60.     return $arr;
  61. }
  62. function getdrama($u){
  63.     $arr=New-Object -TypeName System.Collections.ArrayList;
  64.     $content=gethtml $u;
  65.     $m1=[regex]::match($content,'<div class="epipage clear">([\s\S]+?)</div>');
  66.     if($m1.Success){
  67.         $m2=[regex]::matches($m1.groups[1].value, '<li(?: [^>]*?)?>.*?href="([^"]+?)"[^>]*?>(\d+)</a></li>');
  68.         foreach($it in $m2){
  69.             $item=$it.groups[2].value+'|'+$it.groups[1].value;
  70.             [void]$arr.add($item);
  71.         }
  72.     }
  73.     return $arr;
  74. }
  75. function getcontent($u){
  76.     $content='';
  77.     $html=gethtml $u;
  78.     $m3=[regex]::match($html,'<article class="clear epi_c"[^>]*?>([\s\S]+?)</article>');
  79.     if($m3.Success){
  80.         $content=((($m3.groups[1].value -replace '<p>','') -replace '&nbsp;',' ') -replace '</p>',"`r`n") -replace '<div(?: [^>]*?)?>[\s\S]+?</div>','';
  81.         $content=(($content -replace '<[^>]+?>','') -replace '</?[a-z]+','').trim();
  82.     }
  83.     return $content;
  84. }
  85. $startname='1-1';
  86. $fs1=New-Object System.IO.FileStream($resultfile, [System.IO.FileMode]::Append);
  87. $sw1=New-Object System.IO.StreamWriter($fs1, $enc);
  88. $fs2=New-Object System.IO.FileStream($okfile, [System.IO.FileMode]::Append);
  89. $sw2=New-Object System.IO.StreamWriter($fs2, $enc);
  90. $fs3=New-Object System.IO.FileStream($nofile, [System.IO.FileMode]::Append);
  91. $sw3=New-Object System.IO.StreamWriter($fs3, $enc);
  92. $text1=[IO.File]::ReadAllText($listfile, $enc).split("`r`n",[StringSplitOptions]::RemoveEmptyEntries);
  93. if(test-path -liter $startfile){
  94.     $startname=[IO.File]::ReadAllText($startfile, $enc).trim();
  95.     if($startname -match '^\d+$'){$startname=$startname+'-1';}
  96. }
  97. $startnum=$startname.split('-');
  98. for($i=0;$i -lt $text1.Count;$i++){
  99.     if(($i+1) -ge [int]$startnum[0]){
  100.         $has=$false;
  101.         write-host ('-------------------------'+$text1[$i]+'-------------------------');
  102.         $names=@(searchname $text1[$i] $true 2);
  103.         if($names.length -ge 1){
  104.             for($j=0;$j -lt $names.length;$j++){
  105.                 if(($i+1) -eq [int]$startnum[0]){
  106.                     if(($j+1) -lt [int]$startnum[1]){continue;}
  107.                 }
  108.                 [IO.File]::WriteAllText($startfile, ($i+1).toString()+'-'+($j+1).toString(), $enc);
  109.                 $arr=$names[$j].split('|');
  110.                 $iturl='https://www.tvmao.com/'+$arr[1].trim('/')+'/episode';
  111.                 write-host ('【'+$arr[0]+'】    '+$iturl);
  112.                 $title='TTT'+$arr[0];
  113.                 $result=New-Object -TypeName System.Collections.ArrayList;
  114.                 $dramas=@(getdrama $iturl);
  115.                 if($dramas.length -ge 1){
  116.                     [void]$result.add($title);
  117.                     $has=$true;
  118.                     for($k=0;$k -lt $dramas.length;$k++){
  119.                         $brr=$dramas[$k].split('|');
  120.                         $suburl='https://www.tvmao.com/'+$brr[1].trim('/');
  121.                         [void]$result.add('第'+$brr[0]+'集');
  122.                         write-host ('第'+$brr[0]+'集 '+$brr[1]);
  123.                         $t=0;
  124.                         $x=1;
  125.                         $ct='';
  126.                         while($x -le 3){
  127.                             $ct=getcontent $suburl;
  128.                             write-host $ct.length;
  129.                             if($ct.length -gt $minilen){
  130.                                 break;
  131.                             }else{
  132.                                 $t++;
  133.                             }
  134.                             if($t -ge 3){
  135.                                 $t=0;
  136.                                 write-host ('字数少于'+$minilen+',暂停'+$timeout+'秒……');
  137.                                 start-sleep -Seconds $timeout;
  138.                                 $x++;
  139.                             }
  140.                         }
  141.                         [void]$result.add($ct);
  142.                     }
  143.                 }
  144.                 if($result.count -ge 1){
  145.                     $s=@($result) -join "`r`n";
  146.                     $sw1.WriteLine($s);
  147.                     $sw1.WriteLine('');
  148.                     $sw1.Flush();
  149.                 }
  150.             }
  151.         }
  152.         if($has){
  153.             $sw2.WriteLine($text1[$i]);
  154.             $sw2.Flush();
  155.         }else{
  156.             $sw3.WriteLine($text1[$i]);
  157.             $sw3.Flush();
  158.         }
  159.     }
  160. }
  161. $sw1.Close();$fs1.Close();
  162. $sw2.Close();$fs2.Close();
  163. $sw3.Close();$fs3.Close();
复制代码

作者: lxh623    时间: 2021-10-17 18:46

回复 2# zaqmlp
好像考虑比较细致,但是,一般的,页面打开的问题可能过虑了。
但愿能够循环。我觉得,如果按照我的本意,也许是个办法。有时候,网站,第一次没有搜索到,后面又有,反正很奇怪。
谢谢!
作者: went    时间: 2021-10-17 19:13

请举几个搜索失败的名称,我排查一下
作者: zaqmlp    时间: 2021-10-17 19:49

回复 3# lxh623


  看不懂说什么,什么是”一般的,页面打开的问题可能过虑了。“
作者: lxh623    时间: 2021-10-17 22:24

本帖最后由 lxh623 于 2021-10-18 08:00 编辑

https://www.tvmao.com/drama/VzJrUw==/episode/0-1
我把它改成50.这里只有五个字。
没有必要考虑这个,或者考虑网页怎样打开算完了。但是,好像必要性不大。
谢谢!
作者: lxh623    时间: 2021-10-18 08:18

搜到的东西多一些。这是好的方面。还是有遗憾,稍微慢了一点点。
我从150,修改到100,50,10,5 。还是会卡。虽然是网站的内容不全导致。
一晚上抓了300多条。
谢谢!
作者: xczxczxcz    时间: 2021-10-18 09:51

要是一开始 500一个网,多好。其它人也可能帮你写个完整的。网页延迟可能是JS加载的,所以。。。




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