2014-01-20 1 views
1

scrapy를 사용하여 HTML 테이블의 행 수를 가져올 수 없습니다.scrapy를 사용하여 HTML 테이블의 행 수를 얻을 수 없습니다.

나는 HTML 문서 아래처럼이 :

hxs = Selector(response) 

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

<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를 사용하여 테이블의 행 수가 반환 다음 지정할 때

나는 산소에서 xpath를 시도해 본 결과 xpath가 정상적으로 작동한다는 것을 알 수 있었지만 치료 중에는 그렇지 않다는 것을 알 수있다.

+1

브라우저가 추가/제거 태그와 XPath는 도구가 당신에게 깨진 HTML을 수정하기 때문에 브라우저 도구를 신뢰하지 마십시오 권장되지 않는 전체 경로. 가이가 아래 답변에서 지적한 것처럼, 당신이 필요로하는 요소로 표현식을 만드는 것이 낫습니다. – Rolando

답변

3

내가 로컬 파일이라고 in.html에 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']} 
관련 문제