Board logo

标题: [文本处理] [已解决]批处理如何从网页代码中提取图片地址另存到文本? [打印本页]

作者: linjuming    时间: 2008-9-19 13:46     标题: [已解决]批处理如何从网页代码中提取图片地址另存到文本?

例如,原网页源代码如下:
  1. <TABLE cellSpacing=0 cellPadding=0 border=0>
  2. <TBODY>
  3. <TR></TR>
  4. <TR>
  5. <TD vAlign=top width=95 height=95>
  6. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  7. <TBODY>
  8. <TR>
  9. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  10. href="/phoinfo/EF23922CFD54D6216575A84D16CC9E8DDT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  11. class=photoBorder id=EF23922CFD54D6216575A84D16CC9E8DDT
  12. title=001 onmouseout=closedialog(event,this);
  13. src="http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg"
  14. name=setphoto></A></TD>
  15. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  16. width=20>    </TD></TR></TBODY></TABLE></TD>
  17. <TD vAlign=top width=95 height=95>
  18. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  19. <TBODY>
  20. <TR>
  21. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  22. href="/phoinfo/A66133862742F7EA832FAF9C4B11B43FDT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  23. class=photoBorder id=A66133862742F7EA832FAF9C4B11B43FDT
  24. title=002 onmouseout=closedialog(event,this);
  25. src="http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg"
  26. name=setphoto></A></TD>
  27. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  28. width=20>    </TD></TR></TBODY></TABLE></TD>
  29. <TD vAlign=top width=95 height=95>
  30. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  31. <TBODY>
  32. <TR>
  33. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  34. href="/phoinfo/5AB4224E589EE3B6E5BED440EA1C5FD4DT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  35. class=photoBorder id=5AB4224E589EE3B6E5BED440EA1C5FD4DT
  36. title=003 onmouseout=closedialog(event,this);
  37. src="http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg"
  38. name=setphoto></A></TD>
  39. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  40. width=20>    </TD></TR></TBODY></TABLE></TD>
  41. <TD vAlign=top width=95 height=95>
  42. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  43. <TBODY>
  44. <TR>
  45. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  46. href="/phoinfo/A760F4EC50162AEA524E3276B8DF2E95DT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  47. class=photoBorder id=A760F4EC50162AEA524E3276B8DF2E95DT
  48. title=004 onmouseout=closedialog(event,this);
  49. src="http://photo1.bababian.com/upload13/20080919/A760F4EC50162AEA524E3276B8DF2E95_75.jpg"
  50. name=setphoto></A></TD>
  51. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  52. width=20>    </TD></TR></TBODY></TABLE></TD>
  53. <TD vAlign=top width=95 height=95>
  54. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  55. <TBODY>
  56. <TR>
  57. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  58. href="/phoinfo/EFCC42B5A9F5D315AFD37ACE66B70247DT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  59. class=photoBorder id=EFCC42B5A9F5D315AFD37ACE66B70247DT
  60. title=005 onmouseout=closedialog(event,this);
  61. src="http://photo1.bababian.com/upload13/20080919/EFCC42B5A9F5D315AFD37ACE66B70247_75.jpg"
  62. name=setphoto></A></TD></TR></TBODY></TABLE></TD>
  63. <TR></TR>
  64. <TR>
  65. <TD vAlign=top width=95 height=95>
  66. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  67. <TBODY>
  68. <TR>
  69. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  70. href="/phoinfo/1A4F387882E90149942754220858D67ADT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  71. class=photoBorder id=1A4F387882E90149942754220858D67ADT
  72. title=006 onmouseout=closedialog(event,this);
  73. src="http://photo1.bababian.com/upload13/20080919/1A4F387882E90149942754220858D67A_75.jpg"
  74. name=setphoto></A></TD>
  75. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  76. width=20>    </TD></TR></TBODY></TABLE></TD>
  77. <TD vAlign=top width=95 height=95>
  78. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  79. <TBODY>
  80. <TR>
  81. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  82. href="/phoinfo/159199B9EC7DCF2218011DC9515AA70ADT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  83. class=photoBorder id=159199B9EC7DCF2218011DC9515AA70ADT
  84. title=007 onmouseout=closedialog(event,this);
  85. src="http://photo1.bababian.com/upload13/20080919/159199B9EC7DCF2218011DC9515AA70A_75.jpg"
  86. name=setphoto></A></TD>
  87. <TD style="FONT-SIZE: 12px; FONT-FAMILY: Arial, Helvetica, sans-serif"
  88. width=20>    </TD></TR></TBODY></TABLE></TD>
  89. <TD vAlign=top width=95 height=95>
  90. <TABLE cellSpacing=0 cellPadding=0 width=95 border=0>
  91. <TBODY>
  92. <TR>
  93. <TD vAlign=top align=middle width=75 height=95><A class=linkImg
  94. href="/phoinfo/8CFF33CD16EE371998F35178D5D5A215DT/A636ACC2EDDA4F9C9C8FF0D515E4A5F4DS"><IMG
  95. class=photoBorder id=8CFF33CD16EE371998F35178D5D5A215DT
  96. title=008 onmouseout=closedialog(event,this);
  97. src="http://photo1.bababian.com/upload13/20080919/8CFF33CD16EE371998F35178D5D5A215_75.jpg"
复制代码


我想提取其中的图片地址提取出来输出到一个txt文件中去,结果如下
  1. http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
  2. http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
  3. http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
  4. http://photo1.bababian.com/upload13/20080919/A760F4EC50162AEA524E3276B8DF2E95_75.jpg
  5. http://photo1.bababian.com/upload13/20080919/EFCC42B5A9F5D315AFD37ACE66B70247_75.jpg
  6. http://photo1.bababian.com/upload13/20080919/1A4F387882E90149942754220858D67A_75.jpg
  7. http://photo1.bababian.com/upload13/20080919/159199B9EC7DCF2218011DC9515AA70A_75.jpg
  8. .......
复制代码



请问高手怎么写?我不太会批处理。
作者: namejm    时间: 2008-9-19 14:12

  观察网页代码,发现图片地址都是保存在以src=打头的行中,这样的话,只需要提取以src=打头的行,然后,再切分一下就可以了(假设网页代码保存在test.html文件中):
  1. @echo off
  2. cd.>list.txt
  3. for /f "delims== tokens=1*" %%i in ('findstr /b /i "src=" test.html 2^>nul') do (
  4.     set "str=%%j"
  5.     setlocal enabledelayedexpansion
  6.     set str=!str:"=!
  7.     echo !str!>>list.txt
  8.     endlocal
  9. )
  10. start list.txt
复制代码

作者: linjuming    时间: 2008-9-19 14:33

管理员哥哥,好像不行啊
是不是把网页源代码保存为list.txt,再做一个bat程序,里面粘贴你的程序代码。
list.txt  和 bat 文件放在同一个文件夹下面,运行bat就得到结果。
我的理解正确吗?

我按照上面的操作得到的list.txt 是空白文档,请问是什么问题呢?
作者: linjuming    时间: 2008-9-19 14:35

不好意思,看错了,应该保存在test.html 里面才对
作者: linjuming    时间: 2008-9-19 14:38

果然好用,谢谢管理员哥哥了。
作者: linjuming    时间: 2008-9-20 13:53     标题: 如何从网页代码中提取图片地址另存到文本 2

昨天管理员先生给了个图片链接提取的批处理代码给我,确实很好用,在此再次向管理员先生深深表示感谢。

我现在还想就扩展一下这个bat的功能,希望管理员先生能帮我再修正一下。或者其他高手如果愿意,也请显露一下身手,谢谢。

我要求的是:

从几个下载下来的网页文件提取所有网页文件中的源代码中的图片链接(我是用来做外链图片的),统一写入一个txt文件里面。
效果如下:从我上传的附件提取里面的图片地址链接,然后写入一个list.txt文件中。

list.txt里面的内容举例如下显示:

1.html 中的图片
http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
.........
2.html 中的图片
[quote]http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
.........
3.html 中的图片
[quote]http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
.........
4.html 中的图片
http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
.........
5.html 中的图片
http://photo1.bababian.com/upload13/20080919/EF23922CFD54D6216575A84D16CC9E8D_75.jpg
http://photo1.bababian.com/upload13/20080919/A66133862742F7EA832FAF9C4B11B43F_75.jpg
http://photo1.bababian.com/upload13/20080919/5AB4224E589EE3B6E5BED440EA1C5FD4_75.jpg
.........


有瑕疵不要紧,只要能提取到链接然后输出到list.txt上面去就行了,希望管理员先生再帮一次忙,谢谢。
作者: Batcher    时间: 2008-9-20 14:26     标题: 回复 6楼 的帖子

把2楼的代码中test.html改成*.html
作者: namejm    时间: 2008-9-20 14:31

  6楼的网页代码和顶楼的网页代码格式已经大不一样,正在研究中。
作者: namejm    时间: 2008-9-20 14:50

  解决6楼问题的代码如下:
  1. @echo off
  2. cd.>list.txt
  3. for %%i in (*.htm) do (
  4.     (echo.&echo %%i 中的图片&echo.)>>list.txt
  5.     for /f "delims=" %%j in ('findstr /i "src=.*http://.*\.jpg" %%i 2^>nul') do (
  6.         set "str=%%j"
  7.         setlocal enabledelayedexpansion
  8.         set str=!str:"=!
  9.         set str=!str:*src=!
  10.         for /f "delims==> " %%k in ("!str!") do echo %%k>>list.txt
  11.         endlocal
  12.     )
  13. )
  14. start list.txt
复制代码
  发现网页中存在一些不带网址、只有相对路径的jpg文件,不知道你是否需要,如果需要的话,把第二个for语句中findstr里的 .*http:// 字符串去掉即可。
作者: linjuming    时间: 2008-9-20 15:47

我要的就是这样的效果,太完美了,谢谢管理员大哥。
作者: linjuming    时间: 2008-10-4 16:02

管理员大哥,我博客上(http://highlove.blogbus.com)所有的图片都是用你给我的批处理程序处理图片外链的,确实省了我不少麻烦。
但那个批处理还有一点点瑕疵,就是提取出来的链接前面2个和后面3个我是不需要的,能否再帮我修正一下?我的博客是个图片博客,量多了麻烦也就多了,所以能快就快。谢谢

结果中的红色部分是不需要的,附件为rar文件。

251.htm 中的图片
http://myicon.poco.cn/4609/46093729_64.jpg?226271122
'http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_013_120.jpg'
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_000_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_001_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_002_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_003_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_004_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_005_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_006_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_007_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_008_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_009_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_010_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_011_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_012_165.jpg
http://image211.poco.cn/mypoco/myphoto/20081004/14/46093729200810041436233678101103548_013_165.jpg
'http://image211.poco.cn/mypoco/myphoto/20081004/15/46093729200810041506102852951037623_024_120.jpg'
'http://image211.poco.cn/mypoco/myphoto/20081004/15/46093729200810041505002748918257129_014_120.jpg'
'http://image211.poco.cn/mypoco/myphoto/20081004/15/46093729200810041504357323631110317_019_120.jpg'


作者: namejm    时间: 2008-10-4 21:13

  在9楼代码的基础上,再过滤掉单引号和问号就可以了:
  1. @echo off
  2. cd.>list.txt
  3. for %%i in (*.htm) do (
  4.     (echo.&echo %%i 中的图片&echo.)>>list.txt
  5.     for /f "delims=" %%j in ('findstr /i "src=.*http://.*\.jpg" %%i 2^>nul') do (
  6.         set "str=%%j"
  7.         setlocal enabledelayedexpansion
  8.         set str=!str:"=!
  9.         set str=!str:*src=!
  10.         for /f "delims==>'? " %%k in ("!str!") do echo %%k>>list.txt
  11.         endlocal
  12.     )
  13. )
  14. start list.txt
复制代码

作者: linjuming    时间: 2008-10-4 23:13

管理员大哥你误会了,我的意思是吧红色部分全部删除掉不要
作者: namejm    时间: 2008-10-4 23:43

  本以为你是觉得URL中含有问号和单引号而弃之不用,就帮你过滤了一下,原来你的本意是完全不用那些图片。那就把这些过滤掉吧,不过效率十分低下:
  1. @echo off
  2. cd.>list.txt
  3. for %%i in (*.htm) do (
  4.     (echo.&echo %%i 中的图片&echo.)>>list.txt
  5.     for /f "delims=" %%j in ('findstr /i "src=.*http://.*\.jpg" %%i 2^>nul') do (
  6.         set "str=%%j"
  7.         setlocal enabledelayedexpansion
  8.         set str=!str:"=!
  9.         set str=!str:*src=!
  10.         for /f "delims==> " %%k in ("!str!") do (
  11.             echo %%k|findstr /v "' ?">>list.txt
  12.         )
  13.         endlocal
  14.     )
  15. )
  16. start list.txt
复制代码

作者: namejm    时间: 2008-10-4 23:46

  再来个效率大为提升的代码:
  1. @echo off
  2. cd.>list.txt
  3. for %%i in (*.htm) do (
  4.     (echo.&echo %%i 中的图片&echo.)>>list.txt
  5.     for /f "delims=" %%j in ('findstr /i "src=.*http://.*\.jpg" %%i 2^>nul') do (
  6.         set "str=%%j"
  7.         setlocal enabledelayedexpansion
  8.         set str=!str:"=!
  9.         set str=!str:*src=!
  10.         for /f "delims==> " %%k in ("!str!") do (
  11.             if /i "%%~xk"==".jpg" echo %%k>>list.txt
  12.         )
  13.         endlocal
  14.     )
  15. )
  16. start list.txt
复制代码

作者: linjuming    时间: 2008-10-5 14:00

哇,这次的改良版bat运算速度超快啊,准确率百分百,可以给个极品代号了。
再次感谢管理员大哥的帮忙!
作者: pusofalse    时间: 2008-10-5 16:55

  1. @(type 251.htm|wfr /r:"(.*src\=\"^|\"\s.*)" /t|findstr "^http.*\.jpg$">list.txt)&&start list.txt
复制代码
需要WFR.EXE:http://bbs.bathome.net/thread-1909-1-1.html

[ 本帖最后由 pusofalse 于 2008-10-5 17:53 编辑 ]
作者: lzwudi    时间: 2008-10-6 23:27

从上面看来,管理员真的太不容易了,虽然我提的问题少,也没有学习到什么,我还是由衷的感谢各位管理员和热心帮助他人的老师们,祝你们平安快乐!!
帮助别人是快乐吧?
被人帮助是幸福吧?
作者: linjuming    时间: 2008-10-17 10:09

请问poso版主那个wrf.exe怎么使用?下载下来放在哪里才能作用?
我把你的wrf.exe放在网页文件和批处理文件同一个文件夹下,运行批处理出现“找不到结果”
作者: pusofalse    时间: 2008-10-17 18:51

wfr.exe、网页文件、批处理 放在同一目录下运行,没理由不行啊。
  1. @(type 251.htm|wfr /r:"(.*src\=\"^|\"\s.*)" /t|findstr "^http.*\.jpg$">list.txt)&&start list.txt
复制代码
把这里的251.htm改为你的网页文件的名字。
作者: haseky    时间: 2013-6-6 15:58

请问如果楼主的代码是杂乱的,如何提取其中的图片地址?




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