Я собираю какой-то новостной веб-сайт с платформой scrapy, кажется, что он хранит только последний элемент, скопированный и повторенный в цикле
Я хочу сохранить заголовок, дату и ссылку, которые я вычищаю с первой страницыа также хранить всю статью новостей.Поэтому я хочу объединить статью, хранящуюся в списке, в одну строку.
Код товара
import scrapy
class ScrapedItem(scrapy.Item):
# define the fields for your item here like:
title = scrapy.Field()
source = scrapy.Field()
date = scrapy.Field()
paragraph = scrapy.Field()
Код паука
import scrapy
from ..items import ScrapedItem
class CBNCSpider(scrapy.Spider):
name = 'kontan'
start_urls = [
'https://investasi.kontan.co.id/rubrik/28/Emiten'
]
def parse(self, response):
box_text = response.xpath("//ul/li/div[@class='ket']")
items = ScrapedItem()
for crawl in box_text:
title = crawl.css("h1 a::text").extract()
source ="https://investasi.kontan.co.id"+(crawl.css("h1 a::attr(href)").extract()[0])
date = crawl.css("span.font-gray::text").extract()[0].replace("|","")
items['title'] = title
items['source'] =source
items['date'] = date
yield scrapy.Request(url = source,
callback=self.parseparagraph,
meta={'item':items})
def parseparagraph(self, response):
items_old = response.meta['item'] #only last item stored
paragraph = response.xpath("//p/text()").extract()
items_old['paragraph'] = paragraph #merge into single string
yield items_old
Я ожидаю, что результат будетДата, Название и Источник могут быть обновлены через цикл.И статью можно объединить в одну строку для хранения в mysql