我有以下由三个文件组成的简单蜘蛛。
我的目标是正确使用项目加载器来填充我当前正在抓取的数据。
pipeline.py
是一个简单的json文件创建者,如scrapy文档中所述。
items.py
from scrapy.loader import ItemLoader
class FoodItem(scrapy.Item):
brand = scrapy.Field(
input_processor=TakeFirst(),
output_processor=Identity()
)
name = scrapy.Field(
input_processor=TakeFirst(),
output_processor=Identity()
)
description = scrapy.Field(
input_processor=TakeFirst(),
output_processor=Identity()
)
last_updated = scrapy.Field()
spider.py
class MySpider(CrawlSpider):
name = 'Test'
allowed_domains = ['zooplus.fr']
start_urls = [
'https://www.zooplus.fr/shop/chats/aliments_specifiques_therapeutiques_chat/problemes_urinaires_renaux_chat/croquettes_therapeutiques_chat/595867',
]
def parse_item(self, response):
l = ItemLoader(item=PetfoodItem(),response=response)
l.add_xpath('brand', '//*[@id="js-breadcrumb"]/li[4]/a/span/text()')
l.add_xpath('name', '//*[@id="js-product__detail"]/div[1]/div[2]/div[1]/h1/text()')
l.add_xpath('description', '//*[@id="js-product__detail"]/div[1]/div[2]/div[1]/div[1]/meta/@content')
l.add_value('url', response.url)
l.add_value('last_updated', 'today')
l.load_item()
return l.load_item()
如果我手动执行此操作,然后将Spider的代码精确复制到外壳中,那么我将完全填充所需的内容。 Xpath肯定是正确的,因为它已经是一个硬编码且功能强大的蜘蛛,我想使用管道和项目加载器对其进行优化。我无法到达有明显错误的地方。它看起来非常简单。任何想法欢迎。
答案 0 :(得分:2)
您使用的CrawlSpider
错误。
如果您要抓取单个产品,只需坚持原始的Spider
基类:
*标记为^
class MySpider(Spider):
# ^^^^^^
name = 'zooplus'
allowed_domains = ['zooplus.fr']
start_urls = [
'https://www.zooplus.fr/shop/chats/aliments_specifiques_therapeutiques_chat/problemes_urinaires_renaux_chat/croquettes_therapeutiques_chat/595867',
]
def parse(self, response):
# ^^^^^
l = ItemLoader(item=dict(), response=response)
l.add_xpath('brand', '//*[@id="js-breadcrumb"]/li[4]/a/span/text()')
l.add_xpath('name', '//*[@id="js-product__detail"]/div[1]/div[2]/div[1]/h1/text()')
l.add_xpath('description', '//*[@id="js-product__detail"]/div[1]/div[2]/div[1]/div[1]/meta/@content')
l.add_value('url', response.url)
l.add_value('last_updated', 'today')
return l.load_item()
答案 1 :(得分:0)
也许您应该检查ItemLoader
中写的spider.py
。我认为,也许您可以检查您的日志文件。 @BoobaGump使用CrawlSpider
,而parse_item
与parse
的名称不同,这是正确的@Granitosaurus。警告Crawling Rules已指定:
警告
在编写爬网蜘蛛规则时,请避免将解析用作回调,因为CrawlSpider使用解析方法本身来实现其逻辑。因此,如果您覆盖了parse方法,则爬网蜘蛛将不再起作用。
当我使用ItemLoader
时,可以在日志中看到项目,但是在外壳程序中却没有得到项目。