Powershell-如何使用XPath提取本地html文件的元素

Powershell-如何使用XPath提取本地html文件的元素,html,powershell,xpath,Html,Powershell,Xpath,我正在尝试从IMDB网站上抓取一些数据。我想提取的数据是一些电影的片名、发行年份和情节摘要。我已将所有要提取的页面批量下载到硬盘上,当我在Google Chrome上检查要提取的页面元素时,其完整XPath选择器的电影名称如下所示: /html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1/text() 据我所知,我花了很多时间找到了问题的代码,但没有找到答案。我读了一些代码,就像

我正在尝试从IMDB网站上抓取一些数据。我想提取的数据是一些电影的片名、发行年份和情节摘要。我已将所有要提取的页面批量下载到硬盘上,当我在Google Chrome上检查要提取的页面元素时,其完整XPath选择器的电影名称如下所示:

/html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1/text()
据我所知,我花了很多时间找到了问题的代码,但没有找到答案。我读了一些代码,就像

$html = Get-Content -Path "E:\POWERSHELL\IMDB pages\tt0062940.html" -Raw
$htmlFile = New-Object -ComObject "HTMLFile"
$htmlFile.IHTMLDocument2_write($html)
但我不知道现在该怎么办。有人能告诉我,我们是否可以使用XPath在Powershell中选择HTML元素来解析和提取本地文件中的信息。 谢谢。

您可以使用选择Xml,如下所示

$Path = "E:\POWERSHELL\IMDB pages\tt0062940.html"
$h1Text = (Select-Xml -Path $Path -Xpath /html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1).Node.InnerText
$h1Text
或者可以将路径用双引号括起来,这样就不必担心文件夹名称之间的空格

$h1Text = (Select-Xml -Path "E:\POWERSHELL\IMDB pages\tt0062940.html" -Xpath /html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1).Node.InnerText
$h1Text
您可以使用selectxml,如下所示

$Path = "E:\POWERSHELL\IMDB pages\tt0062940.html"
$h1Text = (Select-Xml -Path $Path -Xpath /html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1).Node.InnerText
$h1Text
或者可以将路径用双引号括起来,这样就不必担心文件夹名称之间的空格

$h1Text = (Select-Xml -Path "E:\POWERSHELL\IMDB pages\tt0062940.html" -Xpath /html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div[1]/div[2]/div/div[2]/div[2]/h1).Node.InnerText
$h1Text

无法运行cmd let,因为目录名包含空格。但我不知道如何修复。请尝试更新答案。另一个选项是将路径用双引号括起来。我将文件移动到K:drive上的文件夹中,然后键入命令$h1Text=Select Xml-path K:\MY DOCUMENTS\POWERSHELL\IMDB pages\tt0062940.html-Xpath/html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div/div[1]/div[2]/div[2]/h1.Node.InnerText$h1Text但它表示选择Xml:无法读取文件“K:\MY DOCUMENTS\POWERSHELL\IMDB pages\tt0062940.html”:解析EntityName时出错。第25行,位置49…+CategoryInfo:InvalidArgument:K:\MY DOCUMENTS…\tt0062940.html:String[Select Xml],参数。。我只是引用一些话。我现在要做什么。检查你的html文件是否有效。HTMLW第25行第49列中似乎存在一些问题此处的字符串是什么\tt0062940.html:String[Select Xml],Argument。。我对HTML文件没有任何权限。我只是将链接输入IDM应用程序并下载它。如果你愿意,我将上传文件,然后提供链接。你的cmd let无法运行,因为目录名包含空格。但我不知道如何修复。请尝试更新答案。另一个选项是将路径用双引号括起来。我将文件移动到K:drive上的文件夹中,然后键入命令$h1Text=Select Xml-path K:\MY DOCUMENTS\POWERSHELL\IMDB pages\tt0062940.html-Xpath/html/body/div[3]/div/div[2]/div[5]/div[1]/div/div/div/div[1]/div[2]/div[2]/h1.Node.InnerText$h1Text但它表示选择Xml:无法读取文件“K:\MY DOCUMENTS\POWERSHELL\IMDB pages\tt0062940.html”:解析EntityName时出错。第25行,位置49…+CategoryInfo:InvalidArgument:K:\MY DOCUMENTS…\tt0062940.html:String[Select Xml],参数。。我只是引用一些话。我现在要做什么。检查你的html文件是否有效。HTMLW第25行第49列中似乎存在一些问题此处的字符串是什么\tt0062940.html:String[Select Xml],Argument。。我对HTML文件没有任何权限。我只是将链接输入IDM应用程序并下载它。如果你想,我会上传文件,然后给链接。