【发布时间】:2017-04-05 13:47:46
【问题描述】:
所以我正在尝试使用 scrapy 制作我的第一个爬虫,到目前为止一切顺利,但由于某种原因,我无法让我的爬虫输出到 csv 文件。
它会创建文件,但是当我关闭命令提示符停止爬虫,然后打开它创建的文件时,文件是空的......
谁能看到我可能做错了什么以及为什么没有写入文件?
我正在尝试从维基百科获取标题和图片网址列表。
class WikispyderSpider(CrawlSpider):
name = "wikiSpyder"
custom_settings = {
'ROBOTSTXT_OBEY': False,
'DOWNLOAD_DELAY': 5
}
allowed_domains = ['wikipedia.org']
start_urls = ['https://en.wikipedia.org/wiki/Wikipedia:Unusual_articles']
rules = (
Rule(LinkExtractor(canonicalize=True, unique=True), follow=True, callback="parse_link"),
)
def parse_link(self, response):
hxs = HtmlXPathSelector(response)
item = WikicrawlerItem()
item['title'] = hxs.select('//h1[contains(@id,"firstHeading")]/text()').extract()
item['imgURL'] = hxs.select('//div[contains(@class, "thumbinner")]//a/@href')[0].extract()
print(item)
yield item
pipelines.py
import csv
class WikicrawlerPipeline(object):
def __init__(self):
self.csvwriter = csv.writer(open('results.csv', 'w'))
def process_item(self, item, spider):
self.csvwriter.writerow([item['title'][0], item['imgURL'][0]])
return item
items.py
import scrapy
class WikicrawlerItem(scrapy.Item):
title = scrapy.Field()
imgURL = scrapy.Field()
pass
【问题讨论】:
-
是否正在打印该项目?
-
您是否正确注册了您的项目管道?它是否出现在启动日志中?
-
是的,它正在打印项目,是的,我将管道放在设置中,我知道管道正在工作,因为每次删除它并重新运行爬虫时也会创建 results.csv 文件。该文件只是空白
-
您是否能够在设置中没有自定义项目管道的情况下写入 CSV? IE。你什么时候做
scrapy crawl wikiSpyder -o output.csv? -
不,我无法做到,但我终于通过管道将其写入。发布解决方案