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

[已解决]各20元求两个网站资料下载

本帖最后由 lxh623 于 2018-12-8 19:25 编辑

http://www.zgshige.com/sg/
这个有index。感觉比较醒目。
http://www.52shici.com/original.php?type=1
这个有20个栏目,右边上面两行。下面也是可以翻页。

标题前面加上TTT,第一个有“作者:”,第二个是不是把“文/”换成“作者:”(自己加工也行)。正文保持原来网页转行与隔行,就好了。

谢谢!!

已经第六页了,凑个热闹……

TOP

回复 75# lxh623

请把html文件放到M:\zgshige\test\目录下.

TOP

回复 74# flashercs
不知道你做个试验没有,就是做一个文件夹,放入一两个文件。
我这里不行。谢谢!

TOP

本帖最后由 flashercs 于 2018-12-18 06:36 编辑

回复 70# lxh623

你表面是提取txt文本,实际上是用来当作html使用,对吧?这样每个子文件夹提取为一个txt文件,其实是个没有<head><body>的html文本,例如提取出的"2018-12-17.txt",将其重命名为"2018-12-17.txt.html"后用浏览器打开,就是个完整的html文档,浏览器自动添加<html><head><body>;我猜这应该是你的需求!
请保存为 "提取zgshige.bat"
  1. @echo off
  2. REM 设置htmlRoot = zgshige的html文件根目录
  3. set "htmlRoot=M:\zgshige"
  4. for /f "tokens=1 delims=:" %%A in ('findstr /n "#######*" %0') do more +%%A %0 >"%~dpn0.ps1"
  5. powershell.exe -ExecutionPolicy Bypass -File "%~dpn0.ps1" "%htmlRoot%"
  6. pause
  7. exit /b
  8. ################################################################
  9. # 保留html node
  10. param([string]$htmlRoot)
  11. [string]$scriptPath = [System.IO.Path]::GetDirectoryName($MyInvocation.MyCommand.Definition)
  12. $htmldoc = New-Object -ComObject htmlfile
  13. [void]$htmldoc.IHTMLDocument2_open()
  14. $htmldoc.IHTMLDocument2_write('<!DOCTYPE html><html><head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Page Title</title><meta name="viewport" content="width=device-width, initial-scale=1"></head><body></body></html>')
  15. $htmldoc.IHTMLDocument2_close()
  16. [System.IO.Directory]::GetDirectories($htmlRoot, '*', [System.IO.SearchOption]::AllDirectories)|ForEach-Object {
  17.   $sw = [System.IO.StreamWriter]::new([System.IO.Path]::Combine($scriptPath, [System.IO.Path]::GetFileName($_) + '.txt'), $true, [System.Text.Encoding]::UTF8)
  18.   $sw.AutoFlush = $true
  19.   [System.IO.Directory]::GetFiles($_, '*.html')|ForEach-Object {
  20.     $m = [System.IO.File]::ReadAllText($_, [System.Text.Encoding]::UTF8) -match '<div class="text-center b-b b-2x b-lt">[\S\s]+?(?=<div class="p-sm">)'
  21.     if ($m) {
  22.       Write-Host "提取$_" -ForegroundColor Green
  23.       try {
  24.         $htmldoc.body.innerHTML = $Matches[0]
  25.         $div = $htmldoc.createElement('div');
  26.         # title
  27.         [void]$div.appendChild($htmldoc.body.getElementsByTagName('h3')[0])
  28.         # author
  29.         $divAuthor = $htmldoc.createElement('div')
  30.         [void]$divAuthor.appendChild($htmldoc.body.children[1].children[0].children[0])
  31.         $span = $divAuthor.appendChild($htmldoc.body.children[1].children[0].children[0])
  32.         [void]$span.removeAttributeNode($span.getAttributeNode('class'))
  33.         [void]$div.appendChild($divAuthor)
  34.         # signatureDiv
  35.         $divSignature = $htmldoc.createElement('div')
  36.         $nodeSig = $htmldoc.body.getElementsByClassName('signature')[0]
  37.         if ($null -ne $nodeSig) {
  38.           $span = $htmldoc.createElement('span')
  39.           [void]$span.appendChild($htmldoc.createTextNode($nodeSig.textContent))
  40.           [void]$divSignature.appendChild($span)
  41.         }
  42.         $nodeSigbox = $htmldoc.body.getElementsByClassName('signatureBox')[0]
  43.         if ($null -ne $nodeSigbox) {
  44.           $span = $htmldoc.createElement('span')
  45.           [void]$span.appendChild($htmldoc.createTextNode($nodeSigbox.textContent))
  46.           [void]$divSignature.appendChild($span)
  47.         }
  48.         [void]$div.appendChild($divSignature)
  49.         # content
  50.         $divContent = $htmldoc.body.getElementsByClassName('m-lg font14')[0]
  51.         [void]$divContent.attributes.removeNamedItem('class')
  52.         [void]$div.appendChild($divContent)
  53.         $sw.WriteLine($div.outerHTML)
  54.         Remove-Variable -Name div
  55.       }
  56.       catch {}
  57.     }
  58.   }
  59.   $sw.Close()
  60. }
  61. Remove-Variable -Name htmldoc
复制代码
1

评分人数

TOP

回复 68# lxh623
代码中同时使用了  wget sed htox32c 三个软件,都可在http://bcn.bathome.net/s/tool/index.html中下载到。
目的,学习批处理

TOP

回复 71# WHY

这样的结果 就非常好了。
前一次,删除了空格。得不到单书名号的标题。
我以为66楼是牢骚,不好意思。现在这样就好。

标题是昨天发现的,别的网站也有过类似问题。空格是今天发现的。

谢谢!祝您开心!

TOP

回复 69# lxh623


    66楼你真没明白啥意思,还是有意回避?
以这个网址 http://www.zgshige.com/c/2016-09-01/1735356.shtml 为例,你希望得到的结果到底是什么?
44楼有问题,我更新到 57 楼了。其结果用记事本打开是这样子的:
  1. <h3>TTT<感怀李时珍></h3> 作者: 人生入梦 2016年09月01日13:03 浏览:190 <br /><br />风起 雨落如若几十个春秋<br />心头的蓝叩响烛火 月白<br />枕垫下的青梦 在逆流里一点点修长<br />一剂剂茫然 反复斟酌<br />穿针引线 高山流水结满命运的纯白<br />斑驳的岁月 星辰向北<br />丢了酒中的暖<br />只为离经叛道的一个清晨<br />洗涤书籍中的暗疾<br /><br />荡起来 一汪**的光芒<br />漫下船舶 芦苇 云烟的眸子<br />一杆秤有雪 有远方<br />雨湖一层层的白 掀起<br />历史的绯红<br />点点萤火打开浅浅的咸<br />隔着天涯扎进尘世<br />身轻如草 剃去满山的琉璃<br />一声轻咳<br />便顺从了五角落叶的指向<br /><br />把今生搁置华发横生<br />摘取水的一个意外 盈盈如桃花<br />波光的对岸 手捧一簇月光<br />抵过一阵阵苍凉<br />大锣鼓 唱大戏<br />杯中的涩 反复折磨已醉的人<br />一点点落空 聚集 月色里往返<br />放逐夜的媚<br />
复制代码
看看与你希望的结果差别在哪里,然后把你希望的结果贴出来。

TOP

本帖最后由 lxh623 于 2018-12-17 10:29 编辑

回复 5# flashercs

分节的空行希望保留,还有题记、注释、发布时间也保留。浏览数不要(我自己可以批量删除)。
题记http://www.zgshige.com/c/2018-12-15/7967119.shtml
注释http://www.zgshige.com/c/2018-12-15/7967226.shtml

这个标题保存得到,无论是否含有单书名号。

您的提取脚本不会用。我的文件在M:\zgshige子文件夹。要求跟下载一样。
谢谢!

TOP

本帖最后由 lxh623 于 2018-12-17 09:30 编辑

回复 66# WHY

真的麻烦你多次,不好意思。
44楼的脚本,把正文的空格删了,希望能保留。
另外,标题有<>,标题就可能提取不到。脚本和textforever一样,真是复杂。http://www.zgshige.com/c/2016-09-01/1735356.shtml
能不能最后改一改?谢谢!

TOP

回复 67# hlzj88

下载了index ,就不动了。

TOP

凑热闹贴,没有进一步优化。
  1. rem 从诗文txt就可知已经下载的进度
  2. for /l %%g in (1,1,20) do (
  3.     wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" --no-check-certificate -e robots=off -c -N -t 0 -T 10 -O index.html "http://www.52shici.com/original.php?type=%%g"
  4.      sed -n '/text-dashed/,/pages/'{p} index.html>>teste.ini
  5.      findstr /iv "works-info" teste.ini>>dizhi.ini
  6.      del teste.ini
  7.      sed -i "s/\"/\n\"\nhttp:\/\/www.52shici.com\//g" dizhi.ini
  8.      findstr /i "php" dizhi.ini>>dizhi.inf
  9. for /f "delims=*" %%i in (dizhi.inf) do (
  10.   wget --user-agent="Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3" --no-check-certificate -e robots=off -c -N -t 0 -T 10 -O wz.ini "%%i"
  11.      iconv -c -f utf-8 -t GBK "wz.ini" >wz1.ini
  12.      findstr /i "author" 235253.html|findstr /i "nbsp">>wz1.ini
  13.      sed -n '/works-content/,/works-info/'{p} wz1.ini>>testw.ini
  14.      findstr /iv "works-info" testw.ini>>zw.html
  15.      del teste.ini
  16.      htox32c /IP /O0 zw.html>nul 2>nul
  17.      type zw.txt>>诗文%%g.txt
  18.      del zw.txt
  19.      del *.ini
  20. )
  21. del *.inf
  22. )
  23. pause
复制代码
1

评分人数

目的,学习批处理

TOP

回复 63# lxh623


    顶楼的描述可能你认为清楚,但我相信绝大多数人不清楚。
1.我只是在 html 中的“作者”前面加上 TTT 就完全满足了你的要求;
2.我要是把 html 完整地转换成 txt 文本,而不抠出诗词部分,也完全满足你的要求;
3.我要是只截取 html 的诗词部分,不经任何处理另存为 html 也完全满足你的要求。

TOP

有个批处理。
  1. @grep -c "</div><div>" *.html>"%~dp0统计.txt"
复制代码
怎样把它用于所有子文件夹?合并统计或者分别统计。
谢谢!

TOP

回复  lxh623

如果网站不限制下载的话,把同时下载开大些,单个文件的线程小点。百兆宽带。限制最大下载 ...
xczxczxcz 发表于 2018-12-14 17:52

麻烦写的详细一些。比如,链接写入一个文本,是不是可以自己保存网页为文本?保存地址?

TOP

返回列表