Python scrapy:试图调试代码的新手

Python scrapy:试图调试代码的新手,python,scrapy,Python,Scrapy,完全是新手,试图让scrapy从csv中读取URL列表并返回csv中的项目。 需要一些帮助来找出我的错误: 蜘蛛代码: from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector import random class incyspider(BaseSpider): name = "incyspider" def __init__(self): super(

完全是新手,试图让scrapy从csv中读取URL列表并返回csv中的项目。 需要一些帮助来找出我的错误: 蜘蛛代码:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
import random

class incyspider(BaseSpider):
    name = "incyspider"
    def __init__(self):
        super(incyspider, self).__init__()
        domain_name = "incyspider.co.uk"
        f = open("urls.csv")
        start_urls = [url.strip() for url in f.readlines()]
        f.close

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@class="Product"]')
        items = []
        for site in sites:
            item['title'] = hxs.select('//div[@class="Name"]/node()').extract()
            item['hlink'] = hxs.select('//div[@class="Price"]/node()').extract()
            item['price'] = hxs.select('//div[@class="Codes"]/node()').extract()
            items.append(item)

        return items

SPIDER = incyspider()
下面是items.py代码:

from scrapy.item import Item, Field

class incyspider(Item):
    # define the fields for your item here like:
    # name = Field()
    title = Field()
    hlink = Field()
    price = Field()
    pass
为了跑,我用

scrapy crawl incyspider -o items.csv -t csv

如果有任何提示,我将不胜感激。

我不太确定,但在快速查看您的代码后,我会说,至少您需要替换这一行

sites = hxs.select('//div[@class="Product"]')
sites = hxs.select('//div[@class="Product"]').extract() 
按这条线

sites = hxs.select('//div[@class="Product"]')
sites = hxs.select('//div[@class="Product"]').extract() 

作为回答这个问题的第一步,您的spider代码缺少对您的
incyspider
item类的导入。另外,您没有创建任何类型的项目实例来存储title/hlink/price信息,因此
items.append(item)
行可能会抱怨

由于爬行器也称为
incyspider
,因此应将该项重命名为类似于
incyspiderItem
,然后将以下行添加到爬行器代码中

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
import random
from incyspider.items import incyspiderItem 

class incyspider(BaseSpider):
    name = "incyspider"
    def __init__(self):
        super(incyspider, self).__init__()
        domain_name = "incyspider.co.uk"
        f = open("urls.csv")
        start_urls = [url.strip() for url in f.readlines()]
        f.close

    def parse(self, response):
        hxs = HtmlXPathSelector(response)
        sites = hxs.select('//div[@class="Product"]')
        items = []
        for site in sites:
            item = incyspiderItem()
            item['title'] = hxs.select('//div[@class="Name"]/node()').extract()
            item['hlink'] = hxs.select('//div[@class="Price"]/node()').extract()
            item['price'] = hxs.select('//div[@class="Codes"]/node()').extract()
            items.append(item)

        return items

如果我错了,那么请编辑问题以解释您如何知道代码存在问题,例如:预期输出与实际输出是否不同?如果是,如何进行?

在开始爬网过程时,是否会出现任何错误?查看残缺的日志文件,并在这里发布其中的内容。如果没有更多信息,我们无法帮助您。谢谢-我修改了代码,现在看起来主要错误是:“exceptions.NameError:global name'item'未定义”如果这是基本内容,请道歉-我上次做的编程是在ZX频谱上的basic中!非常感谢-我想我现在有进展了。我可以检查一下吗?您在哪里使用了“from tutorial.items import incyspiderItem”我应该用我的项目名称替换tutorial吗?比如说“从印加进口印地安人的物品”就很好。请记住接受最有利的答案。:)@标记P:“
有义务的
-o·blige(动词)的过去式1.使(某人)在法律上或道德上受某一行为或行为过程的约束……”你不受法律约束,但鼓励你接受一个有助于你找到解决方案的答案:)