吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 954|回复: 7
收起左侧

[已解决] 求问大佬,关于Python批量下载续传的问题

[复制链接]
onlyclxy 发表于 2021-11-16 18:33
本帖最后由 onlyclxy 于 2021-11-18 16:54 编辑

小白问下大佬们, 我要用Python爬一个网址, 大约4800条下载地址.   要是用协程异步爬取的话, 也需要打开近5000个网页.   但是怕中途出错程序挂了再重新打开5k个页面. 就想着做个续传的功能.. 就想着做个表, 已经爬过的页面就标记一下, 这样再次开始爬取的时候, 略过已经爬过的页面就好.  
但是因为一个没接触过数据库, 用什么记录已爬取就犯难了. 暂时用的是csv, 但是如果是协程异步记录的话, 会不会出现同时调用一个csv从而打架的情况? .  要是打架该怎么办呢?
之前已经把所有要爬的网址统计到一个csv表里了.
image.png
要是把已经爬取过直接记录在这个表的后面的列,又涉及csv增加列的问题. (要是xls处理速度就特别慢).要是新增加一个表,用a+的形式, 会不会就一个打开表后,另一个线程就不能写入了... 就感觉好头疼的样子...

大佬们对于这种情况一般是咋处理的呢?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

微笑怪士 发表于 2021-11-16 19:23
仅供参考
可以直接增加一列,全都填充成0。
如果下载完成之后,修改0为1。这样不就记录了莫?

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 谢谢@Thanks!

查看全部评分

Syize 发表于 2021-11-16 20:53
如果不追求速度就换成线程+锁或者进程+锁+异步的方式吧,协程异步操作文件冲突还没遇到过,蹲一手大佬

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 热心回复!

查看全部评分

Syize 发表于 2021-11-16 21:01
或者我有一个构思,但是没有实践过,定义一个全局的对象专门进行处理工作,并设置一个变量lock,操作文件时先检查lock,若值为0,说明空闲,将其赋值为1,并记录,记录完以后再改回0。
(没有代码检验过,不一定对)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 谢谢@Thanks!

查看全部评分

shamozhihu 发表于 2021-11-16 21:13
异步锁的方式,或者在最后面加入一行,进行判断是不是进行传输就可以了

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 谢谢@Thanks!

查看全部评分

oudaidai 发表于 2021-11-16 21:21
不会用协程,说一下会不会出现csv打架的情况,你可以开多个python程序都去调用它试一试,好像是不会冲突的(我是用txt测试的),我觉得楼主可以尝试一下。上面有位同学说增加一列标明0和1也是可以的,我觉得维护一个id表也是可以的(5000个不算多),python用的不多,说的不对还请见谅哈

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 谢谢@Thanks!

查看全部评分

kafei000 发表于 2021-11-16 22:52
5000条数据其实用不上协程,线程池就行了
其实你这功能就是”更新“功能对吧,如果已有数据,直接顺序爬取,如果遇到重复的表项就结束爬取。e若
①打开csv文件,提读取项到内存中
②开始顺序爬取,如果表项重复就停止爬入,
③将爬取的信息写入csv

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 我很赞同!

查看全部评分

Prozacs 发表于 2021-11-17 09:39
队列,多线程就够了。5000又不多

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
onlyclxy + 1 + 1 热心回复!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 20:54

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表