2017-01-06 124 views
0

我试图通过提取子链接和他们的头衔刮网站,然后将提取的标题及其相关的链接保存到一个CSV文件。我运行下面的代码,创建了CSV文件,但它是空的。任何帮助?如何在Scrapy中将抓取的数据写入CSV文件?

我Spider.py文件看起来像这样:

from scrapy import cmdline 
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors import LinkExtractor 

class HyperLinksSpider(CrawlSpider): 
    name = "linksSpy" 
    allowed_domains = ["some_website"] 
    start_urls = ["some_website"] 
    rules = (Rule(LinkExtractor(allow=()), callback='parse_obj', follow=True),) 

def parse_obj(self, response): 
    items = [] 
    for link in LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response): 
     item = ExtractlinksItem() 
     for sel in response.xpath('//tr/td/a'): 
       item['title'] = sel.xpath('/text()').extract() 
       item['link'] = sel.xpath('/@href').extract() 
     items.append(item) 
     return items 
cmdline.execute("scrapy crawl linksSpy".split()) 

我pipelines.py是:

import csv 

class ExtractlinksPipeline(object): 

def __init__(self): 
    self.csvwriter = csv.writer(open('Links.csv', 'wb')) 

def process_item(self, item, spider): 
    self.csvwriter.writerow((item['title'][0]), item['link'][0]) 
    return item 

我items.py是:

import scrapy 

class ExtractlinksItem(scrapy.Item): 
# define the fields for your item here like: 
    title = scrapy.Field() 
    link = scrapy.Field() 

pass 

我也改变了我的settings.py:

ITEM_PIPELINES = {'extractLinks.pipelines.ExtractlinksPipeline': 1} 

回答

0

输出所有数据scrapy已经内置的功能,称为Feed Exports
简而言之,您需要的仅仅是settings.py文件中的两个设置:FEED_FORMAT - 应保存馈送的格式,您的情况csv和FEED_URI - 应保存馈送的位置。
https://stackoverflow.com/a/41473241/3737009

+0

能否请您详细阐述更多关于这个:~/my_feed.csv

我回答有关与用例覆盖它更详细?我试过你在这里给出的例子[链接](http://stackoverflow.com/a/41473241/3737009),但没有写入到csv文件。 你的意思是我必须把这两个设置放在我的setting.py中,而不需要在我的代码中改变任何东西?我想我应该禁用pipelineitems方法,对吧? – owise

+0

@owise是啊试着禁用你的管道。只要您的蜘蛛返回任何物品,饲料出口商就会将它们写入您的饲料。 – Granitosaurus