【问题标题】:Scrapy successful but won't output any information?Scrapy成功但不会输出任何信息?
【发布时间】:2014-11-28 20:15:36
【问题描述】:

我已经在这个蜘蛛上取得了很大的进步——我刚刚开始习惯编码并且享受它的每一分钟。然而,当我学习时,我的大部分编程都是解决问题。这是我当前的错误:

我的蜘蛛在终端窗口中显示了我想要的所有数据。当我去输出时,什么都没有出现。这是我的代码。

import re
import json
from urlparse import urlparse


from scrapy.selector import Selector
try:
    from scrapy.spider import Spider
except:
    from scrapy.spider import BaseSpider as Spider
from scrapy.utils.response import get_base_url
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import HtmlXPathSelector
from database.items import databaseItem

from scrapy.log import *

class CommonSpider(CrawlSpider):
    name = 'fenders.py'
    allowed_domains = ['usedprice.com']
    start_urls = ['http://www.usedprice.com/items/guitars-musical-instruments/fender/?ob=model_asc#results']

    rules = (

        Rule(LinkExtractor(allow=( )), callback='parse_item'),
    )


    def parse_item(self, response):
        hxs = HtmlXPathSelector(response)
        item = []
        data = hxs.select('//tr[@class="oddItemColor baseText"]')
        tmpNextPage = hxs.select('//div[@class="baseText blue"]/span[@id="pnLink"]/a/@href').extract()
        for attr in data:
        #item = RowItem()
        instrInfo = attr.select('//td[@class="itemResult"]/text()').extract()
        print "Instrument Info: ", instrInfo
        yield instrInfo

【问题讨论】:

  • parse_item() 期望你产生一个项目或加载器,而不是一个字符串。
  • 谢谢。我不完全确定这意味着什么。
  • 您的 RowItem 对象在您的 instrInfo 实例上方被注释掉了。您应该填充 RowItem 并产生它。

标签: python terminal scrapy output


【解决方案1】:

正如 JoeLinux 所说,您正在生成一个字符串,而不是返回该项目。如果您大部分时间都在学习本教程,那么您可能在某个地方(可能是其他名称)有一个“items.py”文件,其中定义了您的项目 - 看起来它被称为“RowItem()”。在这里,您有几个字段,或者可能只有一个字段。

您需要做的是弄清楚您希望如何在项目中存储数据。因此,做一个粗略的假设,您可能希望 RowItem() 包含一个名为 instrInfo 的字段。所以你的 items.py 文件可能包含这样的内容:

class RowItem(scrapy.Item):
    instrInfo = scrapy.Field()

那么你的蜘蛛应该包括如下内容:

item = RowItem()

data = data = hxs.select('//tr[@class="oddItemColor baseText"]')
for attr in data:
    instrInfo = attr.select('//td[@class="itemResult"]/text()').extract()
    item['instrInfo'].append = instrInfo
return item

这会将项目发送到您的管道进行处理。

正如我所说,一些关于你想要做什么的粗略假设,以及你的信息格式,但希望这能让你开始。

另外,打印功能可能不是必需的。当项目返回时,它会在蜘蛛运行时显示在终端(或日志)中。

祝你好运!

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-28
    相关资源
    最近更新 更多