2014-01-20 4 views
1

Невозможно получить количество строк в таблице HTML с помощью scrapy.Невозможно получить количество строк в таблице HTML с помощью scrapy

У меня есть 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() 

Я пробовал xpath в Oxygen и вижу, что 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']} 
Смежные вопросы