是否可以使用Windows批处理从web html页面解析数据?
假设我有一个网页:www.domain.com/data/page/1 页面源html:
...
<div><a href="/post/view/664654"> ....
....
在这种情况下,我需要从网页上获取/发布/查看/ 664654。
我的想法是遍历www.domain.com/data/page/1 ...#(到某个给定的数字)并提取所有/ post / view。然后我会有一个链接列表,从每个链接我将提取href值(图像或视频)。
到目前为止,只有当我知道使用wget的确切链接时,我才能成功下载图像或视频。但我不知道如何(如果可能的话)解析HTML数据。
修改
<body>
<nav>
<section>links I dont need</section>
</nav>
<article>
<section>links I need</section>
</article>
答案 0 :(得分:1)
将结构化标记解析为分层对象更好,而不是将其作为平面文本进行拼写。这样你就不会依赖于你正在解析的数据的格式化(它是否缩小,间距是否已经改变,等等)。
批处理语言非常适合解析HTML,XML,JSON等标记语言。在这种情况下,使用混合脚本并借用JScript或PowerShell方法来帮助它们非常有用。抓取你需要的数据。这是一个演示批处理+ JScript混合脚本的示例。使用.bat扩展名保存并运行。
@if (@CodeSection == @Batch) @then
@echo off & setlocal
set "url=http://www.domain.com/data/page/1"
for /f "delims=" %%I in ('cscript /nologo /e:JScript "%~f0" "%url%"') do (
rem // do something useful with %%I
echo Link found: %%I
)
goto :EOF
@end // end batch / begin JScript hybrid code
// returns a DOM root object
function fetch(url) {
var XHR = WSH.CreateObject("Microsoft.XMLHTTP"),
DOM = WSH.CreateObject('htmlfile');
XHR.open("GET",url,true);
XHR.setRequestHeader('User-Agent','XMLHTTP/1.0');
XHR.send('');
while (XHR.readyState!=4) {WSH.Sleep(25)};
DOM.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
DOM.write(XHR.responseText);
return DOM;
}
var DOM = fetch(WSH.Arguments(0)),
links = DOM.getElementsByTagName('a');
for (var i in links)
if (links[i].href && /\/post\/view\//i.test(links[i].href))
WSH.Echo(links[i].href);
答案 1 :(得分:-1)
如果您只需要获取/post/view/664654
,则可以使用grep
命令,例如
grep -o '/post/view/[^"]\+' *.html
要解析更复杂的HTML,您可以使用HTML-XML-utils或pup
。