Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
can';使用c#/htmlagilitpack无法从amazon.com获得正确的信息_C#_Xpath_Html Agility Pack - Fatal编程技术网

can';使用c#/htmlagilitpack无法从amazon.com获得正确的信息

can';使用c#/htmlagilitpack无法从amazon.com获得正确的信息,c#,xpath,html-agility-pack,C#,Xpath,Html Agility Pack,我想获取图书信息,如作者姓名/页数/出版年份/等等。。。 从amazon使用HtmlAgilityPack,但似乎amazon网页有一些问题,我无法访问相应的字段 以下是我所做的: 我使用Firefox和Firebug+FirePath检索所需的XPath,然后在代码中调用HtmlAgilityPack并指示它使用从Firebug获得的XPath获取信息 但运气不好,到目前为止,我无法访问amazon.com的“产品详细信息”部分 这是我的XPath(仅适用于HtmlAgilityPack) 如

我想获取图书信息,如作者姓名/页数/出版年份/等等。。。 从amazon使用HtmlAgilityPack,但似乎amazon网页有一些问题,我无法访问相应的字段

以下是我所做的:

我使用Firefox和Firebug+FirePath检索所需的XPath,然后在代码中调用HtmlAgilityPack并指示它使用从Firebug获得的XPath获取信息 但运气不好,到目前为止,我无法访问amazon.com的“产品详细信息”部分

这是我的XPath(仅适用于HtmlAgilityPack)

如何使用适用于HtmlAgilityPack的可理解XPath访问产品详细信息


为什么Firebug+FirePath XPath的语法不同于HtmlAgilityPack?

为什么不使用amazon的web服务api来实现这一点呢?

正如@Mystere所说,我建议使用api。但是,如果您这样做是为了测试目的,或者仅仅是因为您想使用网络抓取来获取信息(我不确定亚马逊是否允许,您应该在这样做之前检查一下),下面是一件事:

你为什么这么做

s = content.SelectSingleNode("").OuterHtml;
下面是您要查找的内容,以防您想要获取页面该部分的HTML源代码

s = content.OuterHtml;
当你在抓取的时候,我建议你试着找出你需要抓取的部分,看看那块内容的特殊性

如果您使用:

var node = doc.DocumentNode.SelectNodes("//td[@class='bucket']/div[@class='content']");
这将为您提供您要查找的产品详细信息块。 如果您想获得一些字段,如平装本出版商。。。你可以做:

string paperback = node.SelectSingleNode("./ul/li[1]/text()").InnerText;
string publisher = node.SelectSingleNode("./ul/li[2]/text()").InnerText;
string language = node.SelectSingleNode("./ul/li[3]/text()").InnerText;
...

如果要确保所使用的XPath对于HtmlAgilityPack是正确的,请打开Internet Explorer 8(或9)上的页面,并使用开发人员工具(F12)获取XPath。问题是,每个浏览器都以特定的方式呈现HTML。例如,在Firefox中,您总是会在
之后看到
标记,所以HtmlAgilityPack可能不会,而将
/tbody/
添加到XPath的简单细节可能会使您的程序失败。

我知道amazon有web服务,但我想使用web服务scraping@austin鲍尔斯-我希望你不要指望这会有用。亚马逊可以随时改变他们的网页,打破你的刮。见鬼,不能保证任何两个页面的结构是相同的。不能保证对同一页面的任何两个请求的结构都是相同的。这是一个失败的秘诀。是的,我知道,特别是亚马逊的html是地狱般的意大利面代码,我只想用这种方式检索50本书的信息供个人使用。有时没有其他方法:你只能解析html。我有一个在生产中的解决方案:带小修正的解决方案可以工作近5年。谢谢你的解决方案,但IE的开发工具似乎没有这样的获取xpath的工具(或者至少我找不到)@austin你说得对。问题是,我从不使用整个XPath,因为当布局稍有改变时,它很容易出错。我所做的是使用Firebug,如果它不能与HtmlAgilityPack一起工作,那么我会在Internet Explorer上查看发生了什么。另外,请记住,在HtmlAgilityPack站点中,您有HAP浏览器。这将允许您粘贴HTML代码并对其进行检查。你也可以看看,无论如何,你应该检查一下
string paperback = node.SelectSingleNode("./ul/li[1]/text()").InnerText;
string publisher = node.SelectSingleNode("./ul/li[2]/text()").InnerText;
string language = node.SelectSingleNode("./ul/li[3]/text()").InnerText;
...