【发布时间】:2014-02-09 22:36:13
【问题描述】:
无法使用 scrapy 获取 HTML 表格中的行数。
我有一个 html 文档,如下所示:
<TITLE>Title of Mbean</TITLE>
</HEAD>
<BODY>
<TABLE WIDTH="100%">
<TR>
<TD ALIGN="left"><H2>Array View</H2></TD>
<TD ALIGN="right" VALIGN="top">[JDMK5.0_r16]</TD>
</TR></TABLE>
<UL type="disc"><LI><B>MBean Name:</B> Name of MBean</LI>
<LI><B>MBean Attribute:</B> product list</LI>
<LI><B>Array of:</B> java.lang.String</LI>
</UL>
<TABLE WIDTH="100%"><TR>
<TD ALIGN="LEFT"><A HREF="Object name">Back to MBean View</A></TD>
<TD ALIGN="RIGHT"><A HREF="/">Back to Agent View</A></TD>
</TR></TABLE>
<HR>
<A NAME="Top"></A>
<TABLE ALIGN="center" BORDER="1" CELLPADDING="3">
<TR>
<TH WIDTH="10%"> Element at </TH>
<TH WIDTH="7%"> Access </TH>
<TH WIDTH="35%"> Value </TH>
</TR>
<TR>
<TD ALIGN="center">0</TD><TD ALIGN="center">RO</TD>
<TD>this is the value</TD>
</TR>
<TR>
<TD ALIGN="center">0</TD><TD ALIGN="center">RO</TD>
<TD>this is the second value</TD>
</TR>
</TABLE>
</HR>
</BODY>
</HTML>
当我使用以下 xpath 使用 scrapy 指定以下内容以尝试计算表中的行数时,没有返回任何内容:
hxs = Selector(response)
loader = XPathItemLoader(WebscraperItem(), selector=hxs)
loader.add_xpath('tablecount', 'count(/HTML/BODY/HR/TABLE/TR)')
yield loader.load_item()
我在 Oxygen 中尝试过 xpath,可以看到 xpath 工作正常,但在 scrapy 中不行,有人知道我哪里出错了吗?
【问题讨论】:
-
不要相信浏览器工具,因为浏览器会修复损坏的 html 添加/删除标签,而 xpath 工具会为您提供不推荐的完整路径。正如盖伊在下面的答案中指出的那样,最好只使用您关心/需要的元素来构建表达式。