2013-10-14 413 views
0

嘿下面的問題我從一個網站,這樣形成的表:與scrapy廢表

<table> 
<tr class="head"> 
    <td class="One"> 
    Column 1 
    </td> 
    <td class="Two"> 
    Column 2 
    </td> 
    <td class="Four"> 
    Column 3 
    </td> 
    <td class="Five"> 
    Column 4 
    </td> 
</tr> 
<tr class="DataSet1"> 
    <td class="One"> 
     <table> 
      <tr> 
       <td class="DataType1"> 
        Data 1 
       </td> 
      </tr> 
      <tr> 
       <td class="DataType_2"> 
        <ul> 
         <li> Data 2a</li> 
         <li> Data 2b</li> 
         <li> Data 2c</li> 
         <li> Data 2d</li> 
        </ul> 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Two"> 
     <table> 
      <tr> 
       <td class="DataType_3"> 
        Data 3 
       </td> 
      </tr> 
      <tr> 
       <td class="DataType_4"> 
        Data 4 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Three"> 
     <table> 
      <tr> 
       <td class="DataType_5"> 
        Data 5 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Four"> 
     <table> 
      <tr> 
       <td class="DataType_6"> 
        Data 6 
       </td> 
      </tr> 
     </table> 
    </td> 
</tr> 
<tr class="Empty"> 
    <td class="One"> 
    </td> 
    <td class="Two"> 
    </td> 
    <td class="Four"> 
    </td> 
    <td class="Five"> 
    </td> 
</tr> 
<tr class="DataSet2"> 
    <td class="One"> 
     <table> 
      <tr> 
       <td class="DataType_1"> 
        Data 7 
       </td> 
      </tr> 
      <tr> 
       <td class="DataType_2"> 
        Data 8 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Two"> 
     <table> 
      <tr> 
       <td class="DataType_3"> 
        Data 9 
       </td> 
      </tr> 
      <tr> 
       <td class="DataType_4"> 
        Data 10 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Three"> 
     <table> 
      <tr> 
       <td class="DataType_5"> 
        Data 11 
       </td> 
      </tr> 
     </table> 
    </td> 
    <td class="Four"> 
     <table> 
      <tr> 
       <td class="DataType_6"> 
        Data 12 
       </td> 
      </tr> 
     </table> 
    </td> 
</tr> 
<!-- and so on --> 
</table> 

的標籤有時也emtpy

<td class="DataType_6> </td> 

我試圖放棄與scrapy的內容和下面的腳本:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from project.items import ProjectItem 

class MySpider(BaseSpider): 
    name = "SpiderName" 
    allowed_domains = ["url"] 
    start_urls = ["url"] 
    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     rows = hxs.select('//tr') 
     items = [] 
     item = ProjectItem() 
     item["Data_1"] = rows.select('//td[@class="DataType_1"]/text()').extract() 
     item["Data_2"] = rows.select('//td[@class="DataType_2"]/text()').extract() 
     item["Data_3"] = rows.select('//td[@class="DataType_3"]/text()').extract() 
     item["Data_4"] = rows.select('//td[@class="DataType_4"]/text()').extract() 
     item["Data_5"] = rows.select('//td[@class="DataType_5"]/text()').extract() 
     item["Data_6"] = rows.select('//td[@class="DataType_6"]/text()').extract() 
     items.append(item) 
     return items 

如果我通過

現在爬
scrapy crawl SpiderName -o output.csv -t csv 

,因爲我已經拿到了數據集中的所有值「_1」

+0

你是什麼意思「我只得到廢話」。你得到的實際輸出以及它與預期的不同將會有所幫助。 – audiodude

回答

0

也有類似的問題,我只能得到垃圾一樣多次。首先,rows = hxs.select('//tr')將從第一個孩子開始循環。你需要深入一點,並使用相對路徑。 This link對如何構建代碼給出了一個很好的解釋。

當我終於找到了它的時候,我意識到爲了分別解析每個itemrow.select不應該包含//

希望這會有所幫助。