Board logo

标题: 【完结】抓取电视剧剧情+各50元 [打印本页]

作者: lxh623    时间: 2021-10-10 17:47     标题: 【完结】抓取电视剧剧情+各50元

本帖最后由 lxh623 于 2021-10-12 07:21 编辑

文本内是网址、一行一个。
文本c是,https://www.tvzn.com/8406/
文本d是,https://www.tvmao.com/drama/Ym4mXGVf

想得到如下结果:(写入新的文本)
TTT上海沧桑
第1集
1925年,湖南醴陵。................
第2集
................
................

两个网站,一个五十元。
谢谢!
作者: zaqmlp    时间: 2021-10-10 19:32

本帖最后由 zaqmlp 于 2021-10-10 20:53 编辑
  1. <# :
  2. rem www.tvzn.com
  3. rem 另存为ANSI编码的bat
  4. cls&echo off&cd /d "%~dp0"
  5. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  6. pause
  7. exit
  8. #>
  9. $infile='.\文本c.txt';
  10. $outfile='.\结果.txt';
  11. if(-not (test-path -liter $infile)){write-host ('"'+$infile+'" 未找到');exit;};
  12. $enc=[System.Text.Encoding]::UTF8;
  13. $webclient=New-Object System.Net.WebClient;
  14. function gethtml($u){
  15.     $t='';
  16.     for($j=1;$j -le 3;$j++){
  17.         try{
  18.             $webclient.Headers.Add('User-Agent','Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36');
  19.             $webclient.Encoding=$enc;
  20.             $t=$webclient.DownloadString($u);
  21.             break;
  22.         }catch{
  23.             write-host ('第'+$j.toString()+'次获取网页源码失败');
  24.             start-sleep -Seconds 3;
  25.         };
  26.     };
  27.     return $t;
  28. };
  29. $fs=New-Object System.IO.FileStream($outfile, [System.IO.FileMode]::Create);
  30. $sw=New-Object System.IO.StreamWriter($fs, $enc);
  31. $text=[IO.File]::ReadAllText($infile, $enc).split("`r`n",[StringSplitOptions]::RemoveEmptyEntries);
  32. for($i=0;$i -lt $text.Count;$i++){
  33. write-host ('--------------'+$text[$i]+'--------------');
  34. $url=$text[$i].trimend(' /')
  35. $url1=$url+'/juqingjieshao.html';
  36. $html1=gethtml $url1;
  37. $title='TTT';
  38. $m1=[regex]::match($html1,'>([^<]+?)</h1></div>');
  39. if($m1.Success){$title=$title+$m1.groups[1].value.replace('剧情介绍','');}
  40. write-host $title;
  41. $sw.WriteLine($title);
  42. $m1=[regex]::match($html1,'<div id="danji"[^>]*?>([\s\S]+?)</div></div></div>');
  43. if($m1.Success){
  44. $m2=[regex]::matches($m1.groups[1].value, '<a class="link" href="([^"]+?)">(\d+)</a>');
  45. for($j=$m2.Count-1;$j -ge 0;$j--){
  46. $sw.WriteLine('第'+$m2[$j].groups[2].value+'集');
  47. $url2=($url -replace '^(https?://[^/]+).+','$1')+$m2[$j].groups[1].value;
  48. write-host ($m2[$j].groups[2].value+' '+$url2);
  49. $html2=gethtml $url2;
  50. $m3=[regex]::match($html2,'<div>.*?<center>.*?</center>.*?<br>([\s\S]+?)<div');
  51. if($m3.Success){
  52. $contant=(($m3.groups[1].value -replace '<p>','') -replace '&nbsp;',' ') -replace '</p>',"`r`n";
  53. $contant=$contant.trim();
  54. $sw.WriteLine($contant);
  55. $sw.Flush();
  56. }
  57. }
  58. }
  59. $sw.WriteLine('');
  60. }
  61. $sw.Close();
  62. $fs.Close();
复制代码

作者: zaqmlp    时间: 2021-10-10 19:32

本帖最后由 zaqmlp 于 2021-10-11 16:21 编辑
  1. <# :
  2. rem www.tvmao.com
  3. rem 另存为ANSI编码的bat
  4. cls&echo off&cd /d "%~dp0"
  5. powershell -NoProfile -ExecutionPolicy bypass "[IO.File]::ReadAllText('%~f0',[Text.Encoding]::GetEncoding('GB2312'))|Invoke-Expression"
  6. pause
  7. exit
  8. #>
  9. $starturl=1;
  10. $minilen=160;
  11. $timeout=900;
  12. $infile='.\文本b.txt';
  13. $outfile='.\结果.txt';
  14. if(-not (test-path -liter $infile)){write-host ('"'+$infile+'" 未找到');exit;};
  15. $enc=[System.Text.Encoding]::UTF8;
  16. $webclient=New-Object System.Net.WebClient;
  17. function gethtml($u){
  18.     $t='';
  19.     for($j=1;$j -le 3;$j++){
  20.         try{
  21.             $webclient.Headers.Add('User-Agent','Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36');
  22.             $webclient.Encoding=$enc;
  23.             $t=$webclient.DownloadString($u);
  24.             break;
  25.         }catch{
  26.             write-host ('第'+$j.toString()+'次获取网页源码失败');
  27.             start-sleep -Seconds 3;
  28.         };
  29.     };
  30.     return $t;
  31. };
  32. function getcontent($u){
  33. $content='';
  34.     $html2=gethtml $u;
  35.     $m3=[regex]::match($html2,'<article class="clear epi_c"[^>]*?>([\s\S]+?)</article>');
  36.     if($m3.Success){
  37.         $content=((($m3.groups[1].value -replace '<p>','') -replace '&nbsp;',' ') -replace '</p>',"`r`n") -replace '<div(?: [^>]*?)?>[\s\S]+?</div>','';
  38.         $content=(($content -replace '<[^>]+?>','') -replace '</?[a-z]+','').trim();
  39.     }
  40.     return $content;
  41. }
  42. $fs=New-Object System.IO.FileStream($outfile, [System.IO.FileMode]::Append);
  43. $sw=New-Object System.IO.StreamWriter($fs, $enc);
  44. $text=[IO.File]::ReadAllText($infile, $enc).split("`r`n",[StringSplitOptions]::RemoveEmptyEntries);
  45. for($i=0;$i -lt $text.Count;$i++){
  46. if(($i+1) -ge $starturl){
  47. write-host ('--------------'+$text[$i]+'--------------');
  48. $result=New-Object -TypeName System.Collections.ArrayList;
  49. $url=$text[$i].trimend(' /')
  50. $url1=$url+'/episode';
  51. $html1=gethtml $url1;
  52. $title='TTT';
  53. $m1=[regex]::match($html1,'title="([^"]+?)剧情介绍".*?>介绍');
  54. if($m1.Success){$title=$title+$m1.groups[1].value.replace('剧情介绍','');}
  55. write-host $title;
  56. [void]$result.add($title);
  57. $m1=[regex]::match($html1,'<div class="epipage clear">([\s\S]+?)</div>');
  58. if($m1.Success){
  59. $m2=[regex]::matches($m1.groups[1].value, '<li(?: [^>]*?)?>.*?href="([^"]+?)"[^>]*?>(\d+)</a></li>');
  60. for($j=0;$j -lt $m2.Count;$j++){
  61. [void]$result.add('第'+$m2[$j].groups[2].value+'集');
  62. $url2=($url -replace '^(https?://[^/]+).+','$1')+$m2[$j].groups[1].value;
  63. write-host ($m2[$j].groups[2].value+' '+$url2);
  64. $t=0;
  65. while(1){
  66. $ct=getcontent $url2;
  67. write-host $ct.length;
  68. if($ct.length -gt $minilen){
  69. [void]$result.add($ct);
  70. break;
  71. }else{
  72. $t++;
  73. }
  74. if($t -ge 3){
  75. $t=0;
  76. write-host ('字符数少于'+$minilen+',暂停'+$timeout+'秒……');
  77. start-sleep -Seconds $timeout;
  78. }
  79. }
  80. }
  81. }
  82. $s=$result -join "`r`n";
  83. $sw.WriteLine($s);
  84. $sw.WriteLine('');
  85. $sw.Flush();
  86.     }
  87. }
  88. $sw.Close();
  89. $fs.Close();
复制代码

作者: went    时间: 2021-10-10 19:53

tvzn.bat
  1. #&cls&@cd /d "%~dp0" & powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" &pause&exit
  2. cls
  3. #whr
  4. $whr = New-Object -ComObject 'WinHttp.WinHttpRequest.5.1'
  5. #变量设置
  6. $list_file = 'c.txt'   #电视剧名称列表文件
  7. $out_file = 'info.txt' #输出信息文件
  8. #函数 获取所有分集链接
  9. function Get-PartList($url) {
  10.     $url += 'juqingjieshao.html'
  11.     $whr.Open('GET',$url,$false)
  12.     $whr.Send()
  13.     $txt = $whr.ResponseText
  14.     $whr.Abort()
  15.     $title = ''
  16.     if($txt -match '(?s)<title>(.*?)</title>'){
  17.         $title = $Matches[1] -replace '剧情介绍.*$',''
  18.     }
  19.     return &{
  20.         $title
  21.         [regex]::Matches($txt,'<a class="link" href="(.*?)">(.*?)</a>') | Sort-Object {[int]$_.Groups[2].Value} | foreach {
  22.             $_.Groups[2].Value + '|' + 'https://www.tvzn.com' + $_.Groups[1].Value
  23.         }
  24.     }
  25. }
  26. #函数 根据分集链接获取剧情内容
  27. function Get-PartInfo($part_list){
  28.     #标题
  29.     $title = $part_list[0]
  30.     Write-Host $title
  31.     'TTT' + $title
  32.     #分集
  33.     if($part_list.Count -gt 1){
  34.         for($i = 1; $i -lt $part_list.Count; $i++){
  35.             $arr = $part_list[$i] -split '\|'
  36.             Write-Host ('    第{0}集 {1}' -f $arr[0],$arr[1])
  37.             #---------------------------------
  38.             $url = $arr[1]
  39.             $whr.Open('GET',$url,$false)
  40.             $whr.Send()
  41.             $txt = $whr.ResponseText
  42.             $whr.Abort()
  43.             if($txt -match '(?s)<div class="tn-detail-text".*?</p>'){
  44.                 '第{0}集' -f $arr[0]
  45.                 $Matches[0] -replace '<.*?>|&nbsp;|\s+',''
  46.             }
  47.         }
  48.     }
  49. }
  50. #读取文本内容并解析
  51. Get-Content $list_file | foreach {
  52.     $part_list = Get-PartList -url $_
  53.     $data = Get-PartInfo -part_list $part_list
  54.     Out-File -InputObject $data $out_file -Append
  55. }
复制代码

作者: lxh623    时间: 2021-10-11 07:51

回复 3# zaqmlp
电视猫
信息不全,后面总是少了。麻烦检查一下。
谢谢!
作者: went    时间: 2021-10-11 11:09

tvmao.bat
  1. #&cls&@cd /d "%~dp0" & powershell -c "Get-Content '%~0' | Select-Object -Skip 1 | Out-String | Invoke-Expression" &pause&exit
  2. cls
  3. #whr
  4. $whr = New-Object -ComObject 'WinHttp.WinHttpRequest.5.1'
  5. #设置请求头
  6. function Set-RequestHeader($whr){
  7.     $whr.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');
  8.     $whr.SetRequestHeader('Host','www.tvmao.com')
  9.     $whr.SetRequestHeader('Connection','Keep-Alive')
  10. }
  11. #函数 根据url链接获取所有分集的链接
  12. function Get-PartUrlList($url){
  13.     if($url -eq $null){
  14.         return $null
  15.     }
  16.     $whr.Open('GET',$url,$false)
  17.     Set-RequestHeader -whr $whr
  18.     $whr.Send()
  19.     $txt = $whr.ResponseText
  20.     $whr.Abort()
  21.     $title = ''
  22.     $pattern = '<strong class="font24">(.*?)</strong>'
  23.     if($txt -match $pattern){
  24.         $title = $Matches[1]
  25.     }
  26.     $pattern = '<div class="epipage.*?>.*?</div>'
  27.     if($txt -match $pattern){
  28.         $pattern = '(?s)href="(.*?)"'
  29.         return &{
  30.             $title
  31.             [regex]::Matches($Matches[0],$pattern) | foreach {
  32.                 'https://www.tvmao.com' + $_.Groups[1].Value
  33.             }
  34.         }
  35.     }
  36.     return $null
  37. }
  38. #函数 根据分集url获取分集剧情
  39. function Get-PartInfo($part_url){
  40.     if($part_url -match '-(\d+)$'){
  41.         Write-Host ('解析第{0}集 {1}' -f $Matches[1],$part_url)
  42.         '第{0}集' -f $Matches[1]
  43.     } else {
  44. return;
  45. }
  46.     $whr.Open('GET',$part_url,$false)
  47.     Set-RequestHeader -whr $whr
  48.     $whr.Send()
  49.     $txt = $whr.ResponseText
  50.     $whr.Abort()
  51.     $pattern = '(?s)<article class=".*?epi_c">.*?</article>'
  52.     if($txt -match $pattern){
  53.         $Matches[0] -replace '(?s)<.*?>','' -replace '(?s)\(.*?转载许可\).*$','' -replace '^\s+|\s+$',''
  54.     }
  55. }
  56. #--------------------------------------------------------------------
  57. #变量设置
  58. $list_file = 'd.txt'         #列表文件
  59. $out_file = 'tvmao_info.txt' #输出信息文件
  60. #--------------------------------------------------------------------
  61. Get-Content $list_file | foreach {
  62.     $part_list = Get-PartUrlList -url ($_ + '/episode')
  63.     Write-Host $part_list[0]
  64.     if($part_list.Count -gt 1){
  65.         $data = &{
  66.             'TTT' + $part_list[0]
  67.             for($i = 1;$i -lt $part_list.Count; $i++){
  68.                 Get-PartInfo -part_url $part_list[$i]
  69.             }
  70.         }
  71.         Out-File -InputObject $data $out_file -Append
  72.     }
  73.     Write-Host '----------------'
  74. }
复制代码

作者: zaqmlp    时间: 2021-10-11 16:23

回复 5# lxh623

已修改




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