Json timestamp转LocalDateTime报错JSON parse error: raw timestamp (1595952000000) not allowed for

解决办法加一个LocalDataTime序列化的配置类,在接受时再转一次.

@Configuration
public class LocalDateTimeSerializerConfig {

    @Bean
    public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {
        return builder -> {
            builder.serializerByType(LocalDateTime.class, new LocalDateTimeSerializer());
            builder.deserializerByType(LocalDateTime.class, new LocalDateTimeDeserializer());
        };
    }

    /**
     * 序列化
     */
    public static class LocalDateTimeSerializer extends JsonSerializer<LocalDateTime> {
        @Override
        public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers)
                throws IOException {
            if (value != null) {
                long timestamp = value.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
                gen.writeNumber(timestamp);
            }
        }
    }

    /**
     * 反序列化
     */
    public static class LocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> {
        @Override
        public LocalDateTime deserialize(JsonParser p, DeserializationContext deserializationContext)
                throws IOException {
            long timestamp = p.getValueAsLong();
            if (timestamp > 0) {
                return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault());
            } else {
                return null;
            }
        }
    }
}

 

使用Scrapy爬虫框架抓取Sina新闻网站的新闻标题、媒体和时间,你可以按照以下步骤操作: 1. **安装必要的库**:首先需要安装Scrapy和相关的中间件(如Requests,BeautifulSoup等)。在命令行中运行: ``` pip install scrapy requests bs4 ``` 2. **创建一个新的Scrapy项目**: ``` scrapy startproject sina_news_crawler cd sina_news_crawler ``` 3. **定义项目的结构**: - 创建一个Spider(爬虫)文件,例如`spiders/sinacn_spider.py`,内容如下: ```python import scrapy from sina_news_crawler.items import SinanewsItem class SinaCNSpider(scrapy.Spider): name = 'sinacn' allowed_domains = ['news.sina.com.cn'] start_urls = ['https://news.sina.com.cn/hotnews/'] def parse(self, response): items = [] for article in response.css('div.newslist ul li'): title = article.css('a.title::text').get() media = article.css('.source::text').get() or "Sina News" timestamp = article.css('.time::attr(data-timestamp)').get() item = SinanewsItem(title=title, media=media, timestamp=timestamp) items.append(item) yield item # 需要设置解析下一页的方式,如果存在分页 next_page = response.css('a.next::attr(href)').get() if next_page is not None: yield response.follow(next_page, self.parse) ``` 4. **定义Item(数据模型)**: - 在`items.py`文件中创建一个SinanewsItem类,描述我们要存储的数据: ```python import scrapy class SinanewsItem(scrapy.Item): title = scrapy.Field() media = scrapy.Field() timestamp = scrapy.Field() ``` 5. **配置settings.py**: 确保允许下载图片和其他资源,并设置延迟避免对服务器压力过大: ```python DOWNLOAD_DELAY = 0.5 ROBOTSTXT_OBEY = True ``` 6. **运行爬虫**: ``` scrapy crawl sinacn ``` 7. **处理数据**: 爬虫将返回一个包含新闻列表的JSON文件,你可以选择将其存储到数据库或直接读取分析。 注意:实际操作可能会遇到反爬策略,如验证码、IP限制等。在生产环境中,可能需要使用代理IP池、设置User-Agent、异常处理等功能来提高稳定性。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值