2014-01-20 75 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']}