V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yestodayHadRain
V2EX  ›  问与答

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

  •  
  •   yestodayHadRain · 2019-04-29 16:42:00 +08:00 · 941 次点击
    这是一个创建于 2036 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    5 条回复    2019-04-29 23:09:22 +08:00
    whypool
        1
    whypool  
       2019-04-29 16:57:30 +08:00   ❤️ 1
    写 2 个表就行,有啥问题?
    lanpong
        2
    lanpong  
       2019-04-29 17:38:34 +08:00 via iPhone   ❤️ 1
    封面和详情所指向的商品 url 是唯一的吧?
    yestodayHadRain
        3
    yestodayHadRain  
    OP
       2019-04-29 23:03:47 +08:00 via iPhone
    @whypool 但是爬详情页的时候因为图片不存在之类的会有一些异常,这些我都做了处理。可是不知道为什么有的详情页信息不全,如果放不同的表会对不上,所以想放一起,详情页没有的就放弃这样最多丢几条数据总体的还是好的。
    yestodayHadRain
        4
    yestodayHadRain  
    OP
       2019-04-29 23:08:10 +08:00 via iPhone
    @lanpong 对的,详情页链接里面的商品 id 是一致的,这个可以当作 key,但是这样存储的时候相当于存两次,第一次是插入返回,第二次是更新把数据补上去。我之前没找到怎么然后第二个请求处理方法里获取这个参数的操作,晚上的时候找到了。就是详情页的请求相当于列表页请求的子请求,我发子请求的时候把值放请求里,然后第二个请求处理方法里获取这个值再去做更新操作。不过还是想听听大家遇到这种方法是如何做的,毕竟第一次搞。
    yestodayHadRain
        5
    yestodayHadRain  
    OP
       2019-04-29 23:09:22 +08:00 via iPhone
    ![]( )
    @whypool
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:39 · PVG 19:39 · LAX 03:39 · JFK 06:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.