写过爬虫的大佬们,帮忙看个问题

2019-04-29 16:42:00 +08:00
 yestodayHadRain

老大让去爬一个电商平台的数据,经过分析完后发现商品的信息主要在两个页面里,一个是列表页(包含商品的封面图还有列表页标题什么的) 另一个是商品详情页(商品基本信息).我用的是 java 的 Gecco 框架,两个页面就意味着我需要发两次请求,首先请求列表页然后获取列表页内所有商品的详情页 url,再循环的去请求每个详情页.后面问题来了: 两个请求对应两个不同的处理方法,而且这两个处理方法不存在调用关系(因为是通过 url 请求触发的),所有同一个商品的两份信息在不同的地方,我要如何将他们合并到一起呢?

现在想到的方法是直接入库或者放缓存里,分两次存,第一次存完之后返回一个 key 或者 id ,第二次拿着这个 key 或者 id 去 update 操作,但是这个 id 或者 key 第二个方法要如何获取呢?

最后说下我现在的处理方法,我是通过 poi 吧数据放 excel 里了,但是第二次存的时候有时候会丢失数据,然后因为没有 key 啥的,我就直接判断上一行是否为空为空就在往上,知道上一个不为空才停止,然后在当前位置开始插入.这个方法的缺点是数据丢失的时候会错行(我做了非空校验但是没办法,多线程和单线程都会这样)

941 次点击
所在节点    问与答
5 条回复
whypool
2019-04-29 16:57:30 +08:00
写 2 个表就行,有啥问题?
lanpong
2019-04-29 17:38:34 +08:00
封面和详情所指向的商品 url 是唯一的吧?
yestodayHadRain
2019-04-29 23:03:47 +08:00
@whypool 但是爬详情页的时候因为图片不存在之类的会有一些异常,这些我都做了处理。可是不知道为什么有的详情页信息不全,如果放不同的表会对不上,所以想放一起,详情页没有的就放弃这样最多丢几条数据总体的还是好的。
yestodayHadRain
2019-04-29 23:08:10 +08:00
@lanpong 对的,详情页链接里面的商品 id 是一致的,这个可以当作 key,但是这样存储的时候相当于存两次,第一次是插入返回,第二次是更新把数据补上去。我之前没找到怎么然后第二个请求处理方法里获取这个参数的操作,晚上的时候找到了。就是详情页的请求相当于列表页请求的子请求,我发子请求的时候把值放请求里,然后第二个请求处理方法里获取这个值再去做更新操作。不过还是想听听大家遇到这种方法是如何做的,毕竟第一次搞。
yestodayHadRain
2019-04-29 23:09:22 +08:00
![]( )
@whypool

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/559796

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX