爬虫编程逻辑问题请教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
seekafter
V2EX    程序员

爬虫编程逻辑问题请教

  •  
  •   seekafter 2024-05-29 14:09:44 +08:00 2130 次点击
    这是一个创建于 579 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个编程问题,我在爬取一个相册专辑. 里面目前有 100 张图片,图片 id 从 100 到 1,最近的 id 为 100,最旧的 id 为 1 相册内容会变动,图片 id 会增加到 110,120 等等 每次爬取可能只爬取了 10 张(比如从 id100 爬取到了 id90) 现在是把爬取过的图片 id 入库了,每次下载前查询下是否爬过 我该怎么记录能不少爬取数据?相册更新了该怎么处理?

    我想到的是这样解决的: 1.当专辑第一次运行时,记录初始图片 id(100)和当前图片 id,同时标记专辑未爬完(是否结束为否) 2. 爬数据...每次结束时更新当前图片 id 为当前的 id ,意思下次从这里开始 3. 第二次运行时,如果是否结束为否,就从第二步中的当前图片 id 开始向后爬,直到把是否结束变成是 4. 如果结束了,从头开始爬,爬取时再更新当前图片 id 字段 5.当前图片 id = 初始图片 id 时,把初始图片 id 更新成最新的,专辑结束

    关键就是是否结束这个字段了,为否时爬取旧数据,当旧数据爬完时反过来爬新数据 后续再运行就都是爬新数据了

    表结构: 相册 id | 初始图片 id | 当前图片 id | 是否结束

    请问还有更好的办法不

    13 条回复    2024-05-31 10:57:34 +08:00
    NoOneNoBody
        1
    NoOneNoBody  
       2024-05-29 14:13:12 +08:00
    网页即使变化,图片的 url ,截止到文件名部分应该是不变的
    milukun
        2
    milukun  
       2024-05-29 14:15:20 +08:00
    如果你用 scrapy 框架抓取的话,这个是可以设置自动记录任务进度的,任意时间中断、开启均可以断点继续。
    如果没有用框架的话,你抓取过的链接或者找到唯一识别的 ID 记录下来,去重就好了。抓过的就不再打开详情页继续了
    ZnductR0MjHvjRQ3
        3
    ZnductR0MjHvjRQ3  
       2024-05-29 14:39:28 +08:00
    你要不给图片保存的时候直接保存成 id.jpg 这种 下次直接读本地最新的一张图片的文件名就知道我最新一次爬取到哪里了

    或者你每次爬取都记录一下 id 库里初始 id 为 0 ,0 然后写入每次爬取的 id 判断是否大于最大值或者小于最小值 如果是的话就更新 这样你可以拿到一个爬取区间,然后剩下的就是匹配是否处于爬取区间了

    再或者就给每个文件生成一个文件 md5 ?或者哈希?文件不变这个值就不会变 每次对比?感觉这个方法有点过于笨重
    SenLief
        4
    SenLief  
       2024-05-29 15:38:11 +08:00
    看这意思图片的 url 应该是变动的,url 中含有 id 的话,直接保存一下已下载的 id ,然后更新就可以了吧。
    F7TsdQL45E0jmoiG
        5
    F7TsdQL45E0jmoiG  
       2024-05-29 16:33:39 +08:00
    为啥不从 1 开始爬
    seekafter
        6
    seekafter  
    OP
       2024-05-29 21:13:54 +08:00
    @milukun 是自己写的,只能记录 id 去重了
    seekafter
        7
    seekafter  
    OP
       2024-05-29 21:14:55 +08:00
    @Motorola3 他的 id 并不是顺序的,现在就是记录 id 到数据库,爬取时查询下是否爬过了
    seekafter
        8
    seekafter  
    OP
       2024-05-29 21:15:35 +08:00
    @morenacl 爬取图片的接口没找到倒叙排序的方法,只能从 100->1
    ntedshen
        9
    ntedshen  
       2024-05-29 22:57:55 +08:00
    这不易恒泰的 artistcg 区特色操作么,更新都倒着摆。。。
    一般是先取完列表再下东西,倒不倒其实也就没啥影响。。。

    所以这是要干嘛?尝试把一个分层的爬虫精简到一张表?
    seekafter
        10
    seekafter  
    OP
       2024-05-30 08:55:18 +08:00
    @ntedshen 就是爬取一个图片专辑.先取完列表再下东西确实也行,感谢
    summerLast
        11
    summerLast  
       2024-05-30 09:35:00 +08:00   1
    对每个 url 算出一个 md5, 然后 url 对应 md5 变了就重新抓取?
    seekafter
        12
    seekafter  
    OP
       2024-05-30 15:04:10 +08:00
    @summerLast 爬取时需要先获取专辑 url 里面的数据才能去下载图片,专辑的 url 是固定不变的,所以没办法计算 md5 去重
    summerLast
        13
    summerLast  
       2024-05-31 10:57:34 +08:00
    @seekafter url 对应的资源算出一个 md5
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     939 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 22:45 PVG 06:45 LAX 14:45 JFK 17:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86