老大让去爬一个电商平台的数据,经过分析完后发现商品的信息主要在两个页面里,一个是列表页(包含商品的封面图还有列表页标题什么的) 另一个是商品详情页(商品基本信息).我用的是 java 的 Gecco 框架,两个页面就意味着我需要发两次请求,首先请求列表页然后获取列表页内所有商品的详情页 url,再循环的去请求每个详情页.后面问题来了: 两个请求对应两个不同的处理方法,而且这两个处理方法不存在调用关系(因为是通过 url 请求触发的),所有同一个商品的两份信息在不同的地方,我要如何将他们合并到一起呢?
现在想到的方法是直接入库或者放缓存里,分两次存,第一次存完之后返回一个 key 或者 id ,第二次拿着这个 key 或者 id 去 update 操作,但是这个 id 或者 key 第二个方法要如何获取呢?
最后说下我现在的处理方法,我是通过 poi 吧数据放 excel 里了,但是第二次存的时候有时候会丢失数据,然后因为没有 key 啥的,我就直接判断上一行是否为空为空就在往上,知道上一个不为空才停止,然后在当前位置开始插入.这个方法的缺点是数据丢失的时候会错行(我做了非空校验但是没办法,多线程和单线程都会这样)
1
whypool 2019-04-29 16:57:30 +08:00 1
写 2 个表就行,有啥问题?
|
2
lanpong 2019-04-29 17:38:34 +08:00 via iPhone 1
封面和详情所指向的商品 url 是唯一的吧?
|
3
yestodayHadRain OP @whypool 但是爬详情页的时候因为图片不存在之类的会有一些异常,这些我都做了处理。可是不知道为什么有的详情页信息不全,如果放不同的表会对不上,所以想放一起,详情页没有的就放弃这样最多丢几条数据总体的还是好的。
|
4
yestodayHadRain OP @lanpong 对的,详情页链接里面的商品 id 是一致的,这个可以当作 key,但是这样存储的时候相当于存两次,第一次是插入返回,第二次是更新把数据补上去。我之前没找到怎么然后第二个请求处理方法里获取这个参数的操作,晚上的时候找到了。就是详情页的请求相当于列表页请求的子请求,我发子请求的时候把值放请求里,然后第二个请求处理方法里获取这个值再去做更新操作。不过还是想听听大家遇到这种方法是如何做的,毕竟第一次搞。
|
5
yestodayHadRain OP ![]( )
@whypool |