Рекомендуемый способ при обходе неструктурированных данных с Scrapy является использование ItemLoaders и scrapylib
предлагает некоторые очень хорошие default_input_processor
и default_output_processor
.
items.py
from scrapy import Item, Field
from scrapy.loader import ItemLoader
from scrapylib.processors import default_input_processor
from scrapylib.processors import default_output_processor
class MyItem(Item):
field1 = Field()
field2 = Field()
class MyItemLoader(ItemLoader):
default_item_class = MyItem
default_input_processor = default_input_processor
default_output_processor = default_output_processor
теперь на вашем коде паука, заполнить ваши детали с:
from myproject.items import MyItemLoader
...
... # on your callback
loader = MyItemLoader(response=response)
loader.add_xpath('field1', '//h2[@class="user-card-name"]/text()[1]')
... keep populating the loader
yield loader.load_item() # to return an item
Это один определенно @ IgnacioVazquez- Проблема Абрамса. – alecxe