【问题标题】:How to write scraped data into a CSV file in Scrapy?如何在 Scrapy 中将抓取的数据写入 CSV 文件?
【发布时间】:2017-05-21 11:49:21
【问题描述】:

我正在尝试通过提取子链接及其标题来抓取网站,然后将提取的标题及其相关链接保存到 CSV 文件中。我运行以下代码,创建了 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}

【问题讨论】:

    标签: python csv web-scraping scrapy web-crawler


    【解决方案1】:

    要输出所有数据,scrapy 具有称为 Feed Exports 的内置功能。 简而言之,您只需要在 settings.py 文件中设置两个设置:FEED_FORMAT - 应保存提要的格式,在您的情况下为 csv 和 FEED_URI - 应保存提要的位置,例如~/my_feed.csv

    我的相关答案通过一个用例更详细地介绍了它:
    https://stackoverflow.com/a/41473241/3737009

    【讨论】:

    • 您能详细说明一下吗?我尝试了您在此处给出的示例link,但没有将任何内容写入 csv 文件。你的意思是我需要将这两个设置放在我的 setting.py 中而不需要更改我的代码中的任何内容?我想我应该禁用 pipelineitems 方法,对吧?
    • @owise 是的,尝试禁用您的管道。只要您的蜘蛛返回任何项目,提要导出器就会将它们写入您的提要中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 2011-12-30
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 2019-07-20
    相关资源
    最近更新 更多