caolvchong-top / twitter_download

推特 图片 视频 爬虫;一键下载
342 stars 38 forks source link

tag_down.py如何修改默认最大并发数量和不使用“媒体”排序? #60

Closed erlwm closed 3 weeks ago

erlwm commented 1 month ago

想用tag_down.py下载那些有大量转推用户的古早推文。 但默认好像使用“媒体”排序,但搜索页面的媒体排序跟个人页面一样有上限。 怎么改成在最新排序下下载? 最大连接数好像也不会根据main.py改变?如何修改?

caolvchong-top commented 1 month ago

最大并发数量修改 tag_down 的95行即可 排序这个有点麻烦,暂时可能不会支持

(用媒体页主要是为了省API次数,按最新排序每请求一次只能获取二十条推文,耗得很快)

erlwm commented 1 month ago

好的,多谢

erlwm commented 1 month ago

大佬,现在是这么个情况,main不管是否包含转推都无法下载时间过早的推文。 最热排序虽然每请求一次只能获取20条推文,但使用搜索时加上“filter:links -filter:replies“可以去掉回复和去掉纯文本的推文,这样筛选结果99%都是图片和视频了。 这样虽然一次api只能获取20条推文,但20条都是图文视频推文,上千推文消耗几十api,感觉还能接受,编程小白的想法,如果不对我滑轨。 所以感觉按最热排序加上还是有些用的(最新排序老是显示不全,所以最热更好些)。

caolvchong-top commented 1 month ago

那我改改,今明两天更新

erlwm commented 1 month ago

多谢大佬,大佬慢改,有空闲再做,不急的

caolvchong-top commented 1 month ago

已更新

erlwm commented 1 month ago

多谢大佬!

erlwm commented 1 month ago

大佬,填入tag时,用“from:XXX”来限定作者会报错,只能下载第一页申请的二十个推文 只改了tag和cookie其他全是默认 报错内容如下

Traceback (most recent call last): File "C:\Program Files\twitter_download\tag_down.py", line 314, in tag_down() File "C:\Program Files\twitter_download\tag_down.py", line 167, in init media_lst = self.search_media(url) File "C:\Program Files\twitter_download\tag_down.py", line 190, in search_media raw_data_lst = raw_data[0]['moduleItems'] KeyError: 'moduleItems'

很神奇,加不加#,用until和since限定时间,只写from,from+冒号,只写id,冒号+id都试了下,都可以正常把能显示的都下载 但只要完整加上from:+id就会报错了 但如果不使用from:+id就搜不全,拜托大佬看看问题出在哪里了

caolvchong-top commented 1 month ago

可能是编码的问题,我推了一个更新

如果还是报错的话,贴一下 tag_filter,我再看看

erlwm commented 1 month ago

大佬,目前只有个小问题。 首先media_latest = True时按最新排序一切正常,什么tag 和 _filter都能正常下载,大佬太强了。

问题出现在设置media_latest = False后似乎仍然是按媒体页面下载 测试下当”down_count = 200 media_latest = False“时,无论什么tag 和 _filter都会按媒体页面下载,但一般会在数次请求后达到媒体页面上限,接着显示已完成,对比后发现下载内容与媒体页面一致,但热门页面仍可下滑出现新内容。 当”down_count = 400/600或以上 media_latest = False“时,无论什么tag 和 _filter只要满足媒体页面只有一页也就是20条或更少就会报错。当限定时间段较短,或限定作者时媒体页面几乎必定少于20条,所以必定报错。而放宽限定媒体页面大于20条时,也只会将媒体页面全部下载完,会显示已完成而不会报错。 这可能也是上个版本报错的原因,我之前一直想按年份在热门标签下载,于是调高了down_count关闭media_latest。

大佬,其实现在这个版本已经够用了,最新排序虽然会比热门排序少一些(通过对比近几日推文能得出这个结论,对近几年和过去很多年的推文是否一样不知道),但需要用到这样批量下载古早推文的一般都几千张图片视频打底了,只要不是强迫症绝对要收集每一张,那差个几十几百张图片真不算什么,毕竟推特有无数用户下的无数媒体。 而且推特时不时会封禁账户和一些推文,一些用户时不时退网自删,错过很多几乎绝版视频的我强迫症已经被治好佛系了。

我就是想说大佬如果发现是什么底层代码问题很难解决,或者懒得改那就把按热门排序功能去了,按最新排序已经够用了。 至少我的需求已经满足了,如果大佬或其他人没这个需求其实已经不用改了。

祝大佬身体健康。

错误代码如下: Traceback (most recent call last): File "C:\Program Files\twitter_download\tag_down.py", line 312, in tag_down() File "C:\Program Files\twitter_download\tag_down.py", line 165, in init media_lst = self.search_media(url) File "C:\Program Files\twitter_download\tag_down.py", line 188, in search_media raw_data_lst = raw_data[0]['moduleItems'] KeyError: 'moduleItems'

caolvchong-top commented 1 month ago

media_latest = False 后会按照 媒体 标签页下载,我在那里的文本表述有点歧义

方便提供一下出现问题的tagfilter吗,看起来像是触底后页码cursor的问题,加一个适配应该就好了

erlwm commented 1 month ago

tag = 'from:Futidori_came' _filter = ' since:2024-07-20 filter:links -filter:replies' down_count = 400 media_latest = False 只有在down_count不是200时会报错。 另外media_latest = True触底也会触发报错的小问题,但不影响下载,用起来很ok

caolvchong-top commented 1 month ago

已修复,可以拉最新代码测试一下

erlwm commented 1 month ago

media_latest = True时 下载结束后会正常弹出已完成