标题: 【完结】求抓信息的批处理+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集
复制代码
希望的事情是:
第一步,运行批处理“电视猫剧情”。
第二步,批处理运行完了,info里面名称下面一行行首有第1集的,把名称,比如“创”到文本“b”里面删除那一行(完全一样的内容)。
第三步,文本b修改完毕,删除文本“pass”。停留五分钟。
第四步,重复上面步骤。除非手动停止。
谢谢!
作者: zaqmlp 时间: 2021-10-17 17:02
- <# :
- cls&echo off&mode con lines=5000
- rem bat及txt存为ANSI编码
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
- pause
- exit
- #>
- $listfile="电视剧名称.txt";
- $startfile="记录.txt";
- $resultfile="结果.txt";
- $okfile="有效.txt";
- $nofile="无效.txt";
-
- $minilen=150;
- $timeout=900;
-
- if(-not (test-path -liter $listfile)){write-host ('"'+$listfile+'" 未找到');exit;};
-
- $enc=[Text.Encoding]::GetEncoding('GB2312');
-
- function gethtml($u){
- $content='';
- for($j=1;$j -le 3;$j++){
- try{
- $http=New-Object -ComObject 'Msxml2.XMLHTTP';
- $http.Open('GET', $u, $false);
- $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');
- $http.SetRequestHeader('Host','www.tvmao.com');
- $http.SetRequestHeader('Connection','Keep-Alive');
- $http.Send();
- $content=[System.Text.Encoding]::UTF8.GetString($http.ResponseBody);
- $http.abort();
- break;
- }catch{
- write-host ('第'+$j.toString()+'次获取网页源码失败');
- start-sleep -Seconds 3;
- }
- }
- return $content;
- }
-
- function searchname($w, $f, $s){
- $arr=New-Object -TypeName System.Collections.ArrayList;
- $searchurl='https://www.tvmao.com/servlet/queryobject?type=all&term='+[System.Net.WebUtility]::UrlEncode($w);
- while(1){
- $content=gethtml $searchurl;
- if(-not $content.Contains('503 Service Temporarily Unavailable')){
- $m=[regex]::matches($content, '\{[^\}]*?"name":"([^"]+?)","typeId":11,"url":"([^"]+?)"[^\}]*?\}');
- foreach($it in $m){
- if($f -eq $true){
- if($it.groups[1].value.replace(':',':') -eq $w.replace(':',':')){
- $item=$it.groups[1].value+'|'+$it.groups[2].value;
- [void]$arr.add($item);
- }
- }else{
- $item=$it.groups[1].value+'|'+$it.groups[2].value;
- [void]$arr.add($item);
- }
- }
- break;
- }
- start-sleep -Seconds $s;
- }
- return $arr;
- }
-
- function getdrama($u){
- $arr=New-Object -TypeName System.Collections.ArrayList;
- $content=gethtml $u;
- $m1=[regex]::match($content,'<div class="epipage clear">([\s\S]+?)</div>');
- if($m1.Success){
- $m2=[regex]::matches($m1.groups[1].value, '<li(?: [^>]*?)?>.*?href="([^"]+?)"[^>]*?>(\d+)</a></li>');
- foreach($it in $m2){
- $item=$it.groups[2].value+'|'+$it.groups[1].value;
- [void]$arr.add($item);
- }
- }
- return $arr;
- }
-
- function getcontent($u){
- $content='';
- $html=gethtml $u;
- $m3=[regex]::match($html,'<article class="clear epi_c"[^>]*?>([\s\S]+?)</article>');
- if($m3.Success){
- $content=((($m3.groups[1].value -replace '<p>','') -replace ' ',' ') -replace '</p>',"`r`n") -replace '<div(?: [^>]*?)?>[\s\S]+?</div>','';
- $content=(($content -replace '<[^>]+?>','') -replace '</?[a-z]+','').trim();
- }
- return $content;
- }
-
- $startname='1-1';
- $fs1=New-Object System.IO.FileStream($resultfile, [System.IO.FileMode]::Append);
- $sw1=New-Object System.IO.StreamWriter($fs1, $enc);
- $fs2=New-Object System.IO.FileStream($okfile, [System.IO.FileMode]::Append);
- $sw2=New-Object System.IO.StreamWriter($fs2, $enc);
- $fs3=New-Object System.IO.FileStream($nofile, [System.IO.FileMode]::Append);
- $sw3=New-Object System.IO.StreamWriter($fs3, $enc);
- $text1=[IO.File]::ReadAllText($listfile, $enc).split("`r`n",[StringSplitOptions]::RemoveEmptyEntries);
- if(test-path -liter $startfile){
- $startname=[IO.File]::ReadAllText($startfile, $enc).trim();
- if($startname -match '^\d+$'){$startname=$startname+'-1';}
- }
- $startnum=$startname.split('-');
- for($i=0;$i -lt $text1.Count;$i++){
- if(($i+1) -ge [int]$startnum[0]){
- $has=$false;
- write-host ('-------------------------'+$text1[$i]+'-------------------------');
- $names=@(searchname $text1[$i] $true 2);
- if($names.length -ge 1){
- for($j=0;$j -lt $names.length;$j++){
- if(($i+1) -eq [int]$startnum[0]){
- if(($j+1) -lt [int]$startnum[1]){continue;}
- }
- [IO.File]::WriteAllText($startfile, ($i+1).toString()+'-'+($j+1).toString(), $enc);
- $arr=$names[$j].split('|');
- $iturl='https://www.tvmao.com/'+$arr[1].trim('/')+'/episode';
- write-host ('【'+$arr[0]+'】 '+$iturl);
- $title='TTT'+$arr[0];
- $result=New-Object -TypeName System.Collections.ArrayList;
- $dramas=@(getdrama $iturl);
- if($dramas.length -ge 1){
- [void]$result.add($title);
- $has=$true;
- for($k=0;$k -lt $dramas.length;$k++){
- $brr=$dramas[$k].split('|');
- $suburl='https://www.tvmao.com/'+$brr[1].trim('/');
- [void]$result.add('第'+$brr[0]+'集');
- write-host ('第'+$brr[0]+'集 '+$brr[1]);
- $t=0;
- $x=1;
- $ct='';
- while($x -le 3){
- $ct=getcontent $suburl;
- write-host $ct.length;
- if($ct.length -gt $minilen){
- break;
- }else{
- $t++;
- }
- if($t -ge 3){
- $t=0;
- write-host ('字数少于'+$minilen+',暂停'+$timeout+'秒……');
- start-sleep -Seconds $timeout;
- $x++;
- }
- }
- [void]$result.add($ct);
- }
- }
- if($result.count -ge 1){
- $s=@($result) -join "`r`n";
- $sw1.WriteLine($s);
- $sw1.WriteLine('');
- $sw1.Flush();
- }
- }
- }
- if($has){
- $sw2.WriteLine($text1[$i]);
- $sw2.Flush();
- }else{
- $sw3.WriteLine($text1[$i]);
- $sw3.Flush();
- }
- }
- }
- $sw1.Close();$fs1.Close();
- $sw2.Close();$fs2.Close();
- $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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |