爬虫编程逻辑问题请教

查看 58|回复 4
作者:seekafter   
有个编程问题,我在爬取一个相册专辑.
里面目前有 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 | 是否结束
请问还有更好的办法不
NoOneNoBody   
网页即使变化,图片的 url ,截止到文件名部分应该是不变的
milukun   
如果你用 scrapy 框架抓取的话,这个是可以设置自动记录任务进度的,任意时间中断、开启均可以断点继续。
如果没有用框架的话,你抓取过的链接或者找到唯一识别的 ID 记录下来,去重就好了。抓过的就不再打开详情页继续了
Motorola3   
你要不给图片保存的时候直接保存成 id.jpg 这种 下次直接读本地最新的一张图片的文件名就知道我最新一次爬取到哪里了
或者你每次爬取都记录一下 id 库里初始 id 为 0 ,0 然后写入每次爬取的 id 判断是否大于最大值或者小于最小值 如果是的话就更新 这样你可以拿到一个爬取区间,然后剩下的就是匹配是否处于爬取区间了
再或者就给每个文件生成一个文件 md5 ?或者哈希?文件不变这个值就不会变 每次对比?感觉这个方法有点过于笨重
SenLief   
看这意思图片的 url 应该是变动的,url 中含有 id 的话,直接保存一下已下载的 id ,然后更新就可以了吧。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部