总新手,试图让scrapy从csv中读取网址列表并返回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
我会非常感谢任何指示。
答案 0 :(得分:1)
我不太确定但是在快速查看一下你的代码之后我会说至少你需要更换这一行
sites = hxs.select('//div[@class="Product"]')
通过这一行
sites = hxs.select('//div[@class="Product"]').extract()
答案 1 :(得分:1)
作为回答此问题的第一个补丁,您的蜘蛛代码缺少incyspider
项目类的导入。此外,您没有创建任何类型的项目实例来存储标题/ 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
如果我错了,请编辑问题以解释您如何知道代码存在问题,例如:预期输出是否与实际输出不同?如果是这样,怎么样?