Очистка json с помощью загрузчиков элементов ScrapyPython

Программы на Python
Ответить
Anonymous
 Очистка json с помощью загрузчиков элементов Scrapy

Сообщение Anonymous »

Обновлено после сообщения от @wRAR.
Я следую этому примеру для очистки новостного веб-сайта. Когда я проверяю тип, возвращаемый в его случае, это scrapy.selector.unified.SelectorList.
В моем случае, поскольку интересующие данные заключенный в теги , мне удалось извлечь и проанализировать его в форме List с помощью приведенного ниже кода Python.
fetch('https://newswebsite.com/news/national')

data = re.findall("{.@graph.:(.+?),.@context.:.http:..schema.org..", response.body.decode("utf-8"), re.S)

#convert list to string before converting to json
jsonData = json.loads(''.join(data))


После возврата списка я не могу продолжать следовать примеру для реализации загрузчиков элементов
Не могли бы вы подсказать мне, что такое Python? концепции используются в приведенном ниже коде, чтобы я мог ознакомиться с ним и адаптировать его к своему варианту использования?
Пытаюсь понять, что делает цикл for..
from itemloaders.processors import TakeFirst, MapCompose
from scrapy.loader import ItemLoader

class ChocolateProductLoader(ItemLoader):

default_output_processor = TakeFirst()
price_in = MapCompose(lambda x: x.split("£")[-1])
url_in = MapCompose(lambda x: 'https://www.chocolate.co.uk' + x )

import scrapy
from chocolatescraper.itemloaders import ChocolateProductLoader
from chocolatescraper.items import ChocolateProduct

class ChocolateSpider(scrapy.Spider):

# The name of the spider
name = 'chocolatespider'

# These are the urls that we will start scraping
start_urls = ['https://www.chocolate.co.uk/collections/all']

def parse(self, response):
products = response.css('product-item')

for product in products:
chocolate = ChocolateProductLoader(item=ChocolateProduct(), selector=product)
chocolate.add_css('name', "a.product-item-meta__title::text")
chocolate.add_css('price', 'span.price', re='\n Sale price(.*)')
chocolate.add_css('url', 'div.product-item-meta a::attr(href)')
yield chocolate.load_item()

next_page = response.css('[rel="next"] ::attr(href)').get()

if next_page is not None:
next_page_url = 'https://www.chocolate.co.uk' + next_page
yield response.follow(next_page_url, callback=self.parse)


Подробнее здесь: https://stackoverflow.com/questions/790 ... em-loaders
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»