我想创建一个PowerShell脚本来从网站获取信息。 我正在尝试查找以下HTML标记的网站的首次出现:
<div class="dDoNo gsrt"><span data-dobid="hdw">Text I want to find</span></div>
我正在使用以下PowerShell代码,但未成功,无法输出:
$WebResponse = Invoke-WebRequest "https://www.google.co.in/search?hl=en&q=define+Text"
($WebResponse.ParsedHtml.GetElementsByTagName(‘div’) | Where {
$_.ClassName -eq ‘dDoNo’
}).InnerText
更准确地说: 我正在尝试通过从Google抓取HTML来获取单词的定义,并将此类作为基础: googleDictionaryAPI class
答案 0 :(得分:0)
一方面,您需要在GetElementsByTagName()
的{{1}}子节点上调用DocumentElement
,否则根本无法获得任何结果。另外,类字符串“ dDoNo gsrt”不等于“ dDoNo”,因此您需要测试值是否包含类名称“ dDoNo”。
更改
ParsedHtml
到
($WebResponse.ParsedHtml.GetElementsByTagName(‘div’) | Where {
$_.ClassName -eq ‘dDoNo’
}).InnerText
并且代码应该执行您想要的操作。
请注意,不建议在代码中使用印刷引号(($WebResponse.ParsedHtml.DocumentElement.GetElementsByTagName('div') | Where {
$_.ClassName -match '\bdDoNo\b'
}).InnerText
)。当它们大部分时间都在工作时,我确实遇到了它们以有趣的方式导致事物崩溃的情况。改用普通引号(’
)。
答案 1 :(得分:0)
感谢@Ansgar向我指出正确的解决方案。
主要问题是我从Invoke-WebRequest获得的响应与我从浏览器获得的响应不同。解决方案是在调用请求时定义UserAgent:
$WebResponse = (Invoke-WebRequest -Uri "https://www.google.co.in/search?hl=en&q=define+Text" -UserAgent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36")
($WebResponse.ParsedHtml.DocumentElement.GetElementsByTagName('div') | Where {
$_.ClassName -match '\bdDoNo\b'
}).InnerText