有个编程问题,我在爬取一个相册专辑. 里面目前有 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 | 是否结束
请问还有更好的办法不
1
NoOneNoBody 169 天前
网页即使变化,图片的 url ,截止到文件名部分应该是不变的
|
2
milukun 169 天前
如果你用 scrapy 框架抓取的话,这个是可以设置自动记录任务进度的,任意时间中断、开启均可以断点继续。
如果没有用框架的话,你抓取过的链接或者找到唯一识别的 ID 记录下来,去重就好了。抓过的就不再打开详情页继续了 |
3
ZnductR0MjHvjRQ3 169 天前
你要不给图片保存的时候直接保存成 id.jpg 这种 下次直接读本地最新的一张图片的文件名就知道我最新一次爬取到哪里了
或者你每次爬取都记录一下 id 库里初始 id 为 0 ,0 然后写入每次爬取的 id 判断是否大于最大值或者小于最小值 如果是的话就更新 这样你可以拿到一个爬取区间,然后剩下的就是匹配是否处于爬取区间了 再或者就给每个文件生成一个文件 md5 ?或者哈希?文件不变这个值就不会变 每次对比?感觉这个方法有点过于笨重 |
4
SenLief 169 天前
看这意思图片的 url 应该是变动的,url 中含有 id 的话,直接保存一下已下载的 id ,然后更新就可以了吧。
|
5
F7TsdQL45E0jmoiG 169 天前
为啥不从 1 开始爬
|
9
ntedshen 169 天前
这不易恒泰的 artistcg 区特色操作么,更新都倒着摆。。。
一般是先取完列表再下东西,倒不倒其实也就没啥影响。。。 所以这是要干嘛?尝试把一个分层的爬虫精简到一张表? |
11
summerLast 168 天前 1
对每个 url 算出一个 md5, 然后 url 对应 md5 变了就重新抓取?
|
12
seekafter OP @summerLast 爬取时需要先获取专辑 url 里面的数据才能去下载图片,专辑的 url 是固定不变的,所以没办法计算 md5 去重
|
13
summerLast 167 天前
@seekafter url 对应的资源算出一个 md5
|