2014-03-26 40 views
1

我從一個頁面提取數據,我必須去更深,但我仍然堅持在第一頁。這是我的代碼:scrapy,我試圖刪除提取到csv文件的空行

from scrapy.contrib.spiders import CrawlSpider 
from scrapy.selector import HtmlXPathSelector 
from street.items import HstreetItem 

class MySpider(CrawlSpider): 
name = "go-h" 
allowed_domains = ["http://somedomain.com"] 
start_urls = ["http://somedomain.com"] 

def parse(self,response): 
    #response = response.replace(body=response.body.replace('\n', '')) # doesn't work 
    hxs = HtmlXPathSelector(response) 
    details = hxs.select('//tr') 
    items = [] 
    #n = 0 
    for detail in details: 
     item = HondastreetItem() 
     item['url'] = "".join(detail.select('td[@class="Model_LineModel_odd"]/a/@href | td[@class="Model_LineModel_even"]/a/@href').extract()).strip() 
     item['model'] = "".join(detail.select('td[@class="Model_LineModel_odd"]/a/text() | td[@class="Model_LineModel_even"]/a/text()').extract()) 
     item['year'] = "".join(detail.select('td[@class="Model_LineYear_odd"]/text() | td[@class="Model_LineYear_even"]/text()').extract())    
     items.append(item) 
    return items 

的代碼工作正常,並通過我的pipleine中提取數據到一個CSV文件,它應該像:

cell 1 | cell2 | cell3 
url | model | year 
. 
. 
. 

的問題是,我有很多的空行我csv文件。在開始處,恰好有17行,然後是我的csv文件的填充行之間的空行。我認爲抓取表格前面的幾張表格和抓取的表格中我不需要的一些行(如類別名稱)正在造成這種情況。 我堅持這過去的24小時:(我一直在努力,我通過類似的問題發現,但沒有爲我工作的所有解決方案。

感謝您的幫助!

+0

您沒有顯示您的csv書寫代碼。你有沒有試過[調試你的代碼](https://pythonconquerstheuniverse.wordpress.com/2009/09/10/debugging-in-python/)?你應該能夠確定地知道空行來自哪裏。另外,如果我們看不到html表格結構,我們無法確定問題是否存在。您至少應該發佈示例html – goncalopp

+0

如果您可以提供實際的URL,那麼我們將能夠更徹底地測試您的代碼。 :) – Talvalin

+0

Csv編寫代碼並不重要,我使用piplines.py。它可能是一個地方,你可以防止空行被寫入,但然後我只是想清理所有內容,然後寫入csv。我在我的問題中提到可能同一個表中的錶行造成這種情況,請檢查問題... haraprasadj簡單的答案證明了我的問題中的一切都很清晰。無論如何感謝您的意見。 – mrki

回答

3

我很新的Python和落在這裏試圖瞭解scrapy。

從我的理解,你必須追加空行。所以,你可以嘗試檢查「項目」不是追加語句之前空的,例如,

if not (item['url'] == "" and item['model'] == "" and item['year'] == ""): 
    items.append(item) 

請忽略,如果我誤解了這個問題。

+0

好的建議。你可以將條件簡化爲僅僅是'item ['url']或者item ['model']或者item ['year']'(空字符串在Python中計算爲false) – goncalopp

+0

@goncalopp謝謝,瞭解了一件事情: ) – haraprasadj

+2

很高興幫助:)你也可以嘗試'如果有的話(地圖(item.get,('url','model','year')))',或者甚至簡單地'如果有的話(item.values() )',如果沒有其他項目。有太多可能的方法來做到這一點 – goncalopp