返回列表 发帖

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

本帖最后由 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

@echo off
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
start 1.txtCOPY
gsed下载地址:http://bbs.bathome.net/thread-13353-1-1.html
1

评分人数

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

心在天山,身老沧州。

TOP

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

评分人数

TOP

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

心在天山,身老沧州。

TOP

来个纯P  凑热闹了
@echo off&Setlocal EnableDelayedExpansion
(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 (
    set "str=%%i"
    set "str=!str:"= !"
    FOR %%j in (!str!) do (
        set "str=%%~j"
        if "%%~xj" equ ".html" set "var=http://www.4q8q.com%%~j"
        if "!str:</a>=!" neq "%%~j" (
           set "str=!str:*</a>=!"
           echo !var! !str:~,10!
        )
    )
))>b.txt
PAUSECOPY
1

评分人数

TOP

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

评分人数

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

TOP

回复 4# namejm


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

TOP

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

评分人数

    • CrLf: 学得很快技术 + 1

TOP

回复 8# QIAOXINGXING


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

TOP

返回列表