Python scrapy:试图调试代码的新手
完全是新手,试图让scrapy从csv中读取URL列表并返回csv中的项目。 需要一些帮助来找出我的错误: 蜘蛛代码: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(
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.使(某人)在法律上或道德上受某一行为或行为过程的约束……”你不受法律约束,但鼓励你接受一个有助于你找到解决方案的答案:)