#python-3.x #scrapy #web-crawler #scrapy-item
#python-3.x #scrapy #веб-сканера #scrapy-item
Вопрос:
У меня есть ProductItemlLoader
просто простое ItemlLoader
, которое загружается в простое ProductItem
с offer_type
полем
Я запускаю этот код:
il = ProductItemLoader(response=response)
il.add_css('offer_type', '.incentive-type-label')
и получить:
RuntimeError: To use XPath or CSS selectors, ItemLoader be instantiated with a selector
Что я делаю не так??
Ответ №1:
Более лаконичный способ объявления ItemLoader следующий :
item = ItemLoader(item=ProductItem(), selector=response)
Если вы выполняете цикл по циклу более широкого селектора :
sel = response.xpath('//xpath/selection') # return a list of Selectors
for one_product in sel:
item = ItemLoader(item=ProductItem(), response=response, selector=one_product)
# item populating
# yielding the item
Ответ №2:
Итак, получается, что у меня был этот код, работающий на scrapy 1.4, и теперь я перешел на scrapy 2.3 .
В старой версии это работало нормально, но теперь, чтобы использовать селекторы, мне пришлось добавить несколько строк и удалить старые.
Поэтому вместо этого: il = ProductItemLoader(response=response)
Теперь мне нужно было сделать это:
from scrapy.selector import Selector
selector = Selector(response=response, type='html')
il = AudiDealItemLoader(selector=selector)
ссылка из документации