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

[文本处理] [已解决]批处理怎样获取链接的地址?

本帖最后由 QIAOXINGXING 于 2012-2-24 22:09 编辑

打开网站  http://www.4q8q.com/gaoxiaoqianming/ 可以看到:

国外:思想和才能才是王道,国内:关系和马屁才能横行 2012-02-24
用你的笑容去改变这个世界,别让这个世界改变了你的笑容 2012-02-24
人生的悲惨在于:辛辛苦苦的作了一晚上内容香艳的美梦,第二天早 2012-02-24
qq搞笑个性签名:想当年,顶风尿十丈;叹如今,顺风尿湿鞋 2012-02-23
下面我来采访一下你:作为一名禽兽,你是否觉得你的压力很大 2012-02-23
等等....................................

如何获取标题对应的链接地址,并与后面的日期相对应??
也就是形成一个文本,内容是:

http://www.4q8q.com/gaoxiaoqianming/20124275.html  2012-02-24
http://www.4q8q.com/gaoxiaoqianming/20124274.html  2012-02-24
等等..........................................


我现在碰到的问题是:获取了网页源码后,无法用批处理将有用信息提取出来。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

回复 8# QIAOXINGXING


一行命令的长度是有限制的

TOP

受楼上两位的启发:
  1. @echo off&setlocal enabledelayedexpansion&cd /d "%~dp0"
  2. for /f "delims=" %%i in ('findstr "2012-[0-2][0-9]-[0-9][0-9]" "a.html"') do (
  3.   for %%i in (%%i) do (set "str=!str!#%%i")
  4.   set "tstr=!str:href=;!"
  5.   set "n=0"
  6.   for %%a in (!tstr!) do (
  7.     set /a "n+=1"
  8.     set "url=%%a"
  9.     set "url!n!=!url:~2,30!"
  10.   )
  11.   set "tstr=!str:</a>=;!"
  12.   set "n=0"
  13.   for %%a in (!tstr!) do (
  14.     set /a "n+=1"
  15.     set "dat=%%a"
  16.     set "dat=!dat:~0,10!"
  17.     call echo %%url!n!%%  !dat!
  18.   )
  19. )
  20. pause
复制代码
for %%a in (!tstr!) do () 中 !str! 的长度貌似有限制,导致后面的部分信息无法提取,好在我需要的是前面的。
1

评分人数

    • CrLf: 学得很快技术 + 1

TOP

回复 4# namejm


你那个方法用来学习标签的用法也不错

TOP

麻烦点~!
如果与wget.exe放在一起可以直接下载分析!~
分析结果有点模糊,可以先导出再进行其他处理。
前面的内容是你需要的,后面的可能没有时间。
  1. @echo off&setlocal enabledelayedexpansion
  2. if "%1"=="" (set /p "v=    拖入文件执行或用wget.exe直接回车下载执行……") else call :GXQM %1
  3. if not "%v%"=="" call :GXQM %v%
  4. if exist "%~dp0wget.exe" "%~dp0wget.exe" -O index.txt  "http://www.4q8q.com/gaoxiaoqianming/"&&call :GXQM index.txt
  5. goto :eof
  6. :GXQM
  7. cls&for /f "tokens=* delims=<>= " %%a in ('findstr /i "target=_blank" %1') do (
  8. for   %%i in (%%a) do (
  9. for /f "tokens=1,2,3,4,5* delims=<>= " %%l in ("%%i") do (
  10.     if not "%%l"==""  if /i not "%%l"=="li"  if /i not "%%l"=="a" if /i not "%%l"=="href" if /i not "%%l"=="title" if /i not "%%l"=="_blank" if /i not "%%l"=="target" echo;链接:%%l|findstr /i " /gaoxiaoqianming/ "
  11.     if not "%%m"==""  if /i not "%%m"=="/a" if /i not "%%m"=="a" if /i not "%%m"=="li" echo;标题:%%m
  12.     if not "%%o"=="" if /i not "%%o"=="/li"  echo;时间:%%o
  13. )))
  14. pause
复制代码
1

评分人数

寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

来个纯P  凑热闹了
  1. @echo off&Setlocal EnableDelayedExpansion
  2. (for /f "tokens=*" %%i in ('FINDSTR "</a>[1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]</li>" "a.txt"') DO (
  3.     set "str=%%i"
  4.     set "str=!str:"= !"
  5.     FOR %%j in (!str!) do (
  6.         set "str=%%~j"
  7.         if "%%~xj" equ ".html" set "var=http://www.4q8q.com%%~j"
  8.         if "!str:</a>=!" neq "%%~j" (
  9.            set "str=!str:*</a>=!"
  10.            echo !var! !str:~,10!
  11.         )
  12.     )
  13. ))>b.txt
  14. PAUSE
复制代码
1

评分人数

TOP

3楼先分行再过滤,思路更容易理解,不像我在2楼那样绕来绕去,高明。
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

  1. sed "s/<\/li>/\n/g" a.htm | sed "/-[0-2][0-9]$/!d; s/<li><a href=./http:\/\/www.4q8q.com/; s/. title.*>/ /" >a.txt
复制代码
1

评分人数

TOP

  1. @echo off
  2. gsed -rn "/<div class=\x22wrap\x22>/{n;n;n;:a;s/(\/gaoxiaoqianming\/[0-9]{1,}\.html)[^<]+<\/a>([0-9]{4}-[0-9]{2}-[0-9]{2})(.*)/\3|\1\t\2/;ta;s/[^|]+|//;s#\|#\r\nhttp://www.4q8q.com#g;p}" 1.html>1.txt
  3. start 1.txt
复制代码
gsed下载地址:http://bbs.bathome.net/thread-13353-1-1.html
1

评分人数

尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

返回列表