2011-03-02 58 views
0

我試圖抓取一個網站並將結果保存並格式化爲CSV文件。我能夠保存文件,但是有關於輸出和格式化三個問題:格式化Scrapy的CSV結果

  • 所有結果存在於一個細胞,而不是多條線路上。在列出項目時,是否忘記使用命令,以便它們出現在列表中?

  • 如何刪除每個結果前面的['u...? (我搜查了print,但看不到return

  • 有沒有辦法給某些項目結果添加文本? (例如,我可以添加 「http://groupon.com」 每個deallink結果的開始?)

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from deals.items import DealsItem 

class DealsSpider(BaseSpider): 
    name = "groupon.com" 
    allowed_domains = ["groupon.com"] 
    start_urls = [ 
     "http://www.groupon.com/chicago/all", 
     "http://www.groupon.com/new-york/all" 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//div[@class="page_content clearfix"]') 
     items = [] 
     for site in sites: 
      item = DealsItem() 
      item['deal1']  = site.select('//div[@class="c16_grid_8"]/a/@title').extract() 
      item['deal1link'] = site.select('//div[@class="c16_grid_8"]/a/@href').extract() 
      item['img1']  = site.select('//div[@class="c16_grid_8"]/a/img/@src').extract() 
      item['deal2']  = site.select('//div[@class="c16_grid_8 last"]/a/@title').extract() 
      item['deal2link'] = site.select('//div[@class="c16_grid_8 last"]/a/@href').extract() 
      item['img2']  = site.select('//div[@class="c16_grid_8 last"]/a/img/@src').extract() 
      items.append(item) 
     return items 

回答

2

編輯:現在,我理解這個問題更好。你的parse()函數應該看起來更像下面的代碼嗎?也就是yield - 一次只寫一個項目,而不是返回一個列表。我懷疑你正在返回的列表是格式不正確的單元格。

def parse(self, response): 
    hxs = HtmlXPathSelector(response) 
    sites = hxs.select('//div[@class="page_content clearfix"]') 
    for site in sites: 
     item = DealsItem() 
     item['deal1']  = site.select('//div[@class="c16_grid_8"]/a/@title').extract() 
     item['deal1link'] = site.select('//div[@class="c16_grid_8"]/a/@href').extract() 
     item['img1']  = site.select('//div[@class="c16_grid_8"]/a/img/@src').extract() 
     item['deal2']  = site.select('//div[@class="c16_grid_8 last"]/a/@title').extract() 
     item['deal2link'] = site.select('//div[@class="c16_grid_8 last"]/a/@href').extract() 
     item['img2']  = site.select('//div[@class="c16_grid_8 last"]/a/img/@src').extract() 
     yield item 
+0

您好Martin - 感謝您的快速回復。要獲得csv文件,我使用的代碼是:scrapy crawl groupon.com --set FEED_URI = results.csv --set FEED_FORMAT = csv – William 2011-03-02 20:23:00

+0

啊,對不起 - 我還沒有意識到Scrapy應該做的那對你。在這種情況下,我對你的幫助不大。 – 2011-03-02 20:32:37

+0

不用擔心,謝謝你的努力! – William 2011-03-02 20:34:29