2014-01-20 41 views
1

无法使用scrapy获取HTML表格中的行数。无法使用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> 

,当我指定以下尝试返回使用使用scrapy并没有什么下面的XPath在表中的行数:

hxs = Selector(response) 

loader = XPathItemLoader(WebscraperItem(), selector=hxs) 
loader.add_xpath('tablecount', 'count(/HTML/BODY/HR/TABLE/TR)') 
yield loader.load_item() 

我已经尝试过氧气中的xpath,可以看到xpath工作正常,但只是没有在scrapy中,有没有人有任何想法,我要去哪里错了?

+1

,因为浏览器修复了损坏的HTML添加/删除标签和XPath的工具,给您不信任的浏览器工具不推荐使用完整路径。最好是用你所关心/需要的元素来构建表情,就像盖伊在下面的答案中指出的一样。 – Rolando

回答

3

我复制你的HTML到本地文件名为in.html和:

$ scrapy shell in.html 
... 
>>> from scrapy.item import Item, Field 
>>> class WebscraperItem(Item): tablecount = Field() 
... 
>>> from scrapy.contrib.loader import XPathItemLoader 
>>> loader = XPathItemLoader(WebscraperItem(), selector=sel) 
>>> loader.add_xpath('tablecount', 'count(//table/tr)') 
>>> loader.load_item() 
{'tablecount': [u'5.0']}