我已经在这个蜘蛛上取得了很大的进展 - 我已经习惯了编码并且正在享受它的每一分钟。但是,正如我在学习大部分编程时所解决的问题。这是我当前的错误:
我的蜘蛛在终端窗口中显示了我想要的所有数据。当我去输出时,没有任何东西出现。这是我的代码。
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
答案 0 :(得分:0)
正如JoeLinux所说,你正在产生一个字符串,而不是返回该项目。如果您主要使用本教程,那么您可能有一个" items.py"文件someplace(可能是其他名称),你定义的项目 - 它似乎被称为" 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
这会将项目发送到您的管道进行处理。
正如我所说,关于你正在尝试做什么以及你的信息格式的一些重要假设,但希望这可以让你开始。
另外,打印功能可能不是必需的。当项目返回时,它会在蜘蛛运行时显示在终端(或日志)中。
祝你好运!