3

总新手,试图从 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

我会非常感谢任何指示。

4

2 回答 2

1

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

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

通过这条线

sites = hxs.select('//div[@class="Product"]').extract() 
于 2012-12-20T12:56:20.543 回答
1

作为回答这个问题的第一手,您的蜘蛛代码缺少您的incyspider项目类的导入。此外,您没有创建任何类型的项目的实例来存储标题/hlink/价格信息,因此该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

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

于 2012-12-20T12:57:37.967 回答