caolvchong-top / twitter_download

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

只能下载部分的内容 #63

Closed zheqiaochen closed 1 month ago

zheqiaochen commented 1 month ago

作者您好,非常感谢您编写的程序,让获取推特数据更加便利。在我使用的时候出现了一个小问题,我的目标是爬取用户李老师不是你老师(id:whyyoutouzhele)的所有帖子,但是每次运行程序只能够下载部分的内容,调用了12次token之后就显示下载完成,实际上仅爬取了一小部分。

在看过其他Issue之后我尝试将has_retweet设置为true,但是仍然还是只有部分帖子。我将配置文件附在了下方,期待您的回复


    "emmmmmm": "以下选项三选一, 一般全false, 即 下载目标用户自己发的图片",

    "has_retweet": false,
    "has_retweet_info": "是否包含转推 (包含转推会消耗大量API调用次数)",

    "high_lights": false,
    "high_lights_info": "推特的 [Highlights]亮点 标签,与 [媒体][转推] 不共存,即仅下载亮点标签下的内容",

    "likes": false,
    "likes_info": "用户界面 [Likes] 标签页,即下载指定用户点过赞的推文,与 [媒体][转推][亮点] 不共存, 不支持时间范围限制默认全部下载(点赞时间无法获取), 不生成csv数据统计",

    "_emmmmmm_": "---------------",

    "time_range": "",
    "time_range_info": "时间范围限制,格式如 1990-01-01:2030-01-01 ,不填默认无限制",

    "down_log": true,
    "down_log_info": "开启后将记录已下载的内容,避免重复下载浪费带宽; 注意:如需重新下载已下载内容,需要关闭此选项或删除目录下的 cache_data.log 文件",

    "autoSync": false,
    "autoSync_info": "开启后将基于本地已有的内容自动同步最新的部分, 本质上是自动调整时间范围的左半部分, 右半建议2030-01-01或更长, 每次运行时csv文件会被覆盖",

    "img_format": "jpg",
    "img_format_info": "下载图片/视频的质量(png为高质量,jpg为标准质量)",

    "has_video": false,
    "has_video_info": "是否下载推文中的视频",

    "log_output": false,
    "log_output_info": "是否需要下载过程日志输出",

    "async_down": true,
    "async_down_info": "异步下载,默认开启,网络不好时可以关闭,并发数量可在主函数11行修改",

    "proxy": "",
    "proxy_info": "手动配置代理,默认为空,非必要无需填写 格式: http://localhost:port ",

    "(๑´ڡ`๑)": "info 是注释,凑合着看吧"
}
caolvchong-top commented 1 month ago

可能是打开了down_log的缘故,可以关闭试试

zheqiaochen commented 1 month ago

可能是打开了down_log的缘故,可以关闭试试

谢谢您的回复,我关闭了down_log,结果没有改变,在调用13次api后就提示下载完成了。我尝试了自己另一个twitter账号的cookie,但是结果还是一样,不太清楚出了什么问题,如果您需要我运行诊断代码或者提供信息请告诉我

Screenshot 2024-09-14 at 06 35 42
caolvchong-top commented 1 month ago

zheqiaochen commented 1 month ago
tag = ''
media_latest = True
_filter = 'from:whyyoutouzhele filter:links -filter:replies'

//过滤器可以配合具体的参数(如时间限制),详情请参照这里

谢谢您的解答,我使用了tag_down的方法,目标是爬取whyyoutouzhele的所有文本推文,我的配置如下:

tag = ''
# 填入tag 带上#号
_filter = 'from:whyyoutouzhele filter:links -filter:replies'
# (可选项) 高级搜索

down_count = 10000
# 因为搜索结果数量可能极大,故手动确定下载总量(近似),填50的倍数,最少50

media_latest = True
# media_latest为True时,对应 [最新] 标签页,False对应 [媒体] 标签页 (与文本模式无关)
# 开启时建议 _filter 设置为 _filter = 'filter:links -filter:replies'

# ------------------------ #

text_down = True 
#开启后变为文本下载模式,会消耗大量API次数

##########配置区域##########

max_concurrent_requests = 8     #最大并发数量,默认为8,遇到多次下载失败时适当降低

但是在我爬取了少部分数据后出现了报错:

无过程输出...(๑´ڡ`๑)

Traceback (most recent call last):
  File "/Users/chen/Downloads/twitter_download/tag_down.py", line 318, in <module>
    tag_down()
  File "/Users/chen/Downloads/twitter_download/tag_down.py", line 160, in __init__
    self.search_save_text(url)
  File "/Users/chen/Downloads/twitter_download/tag_down.py", line 273, in search_save_text
    raw_data = json.loads(response)
               ^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/json/__init__.py", line 346, in loads
    return _default_decoder.decode(s)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/anaconda3/lib/python3.11/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

请问这个情况应该怎么办呢

caolvchong-top commented 1 month ago

这是因为账号调用次数超限了 image

//另外不用开启text_down选项,这是用来单下文本内容的

这个账号的推文量太大,一次性下载不太现实,我建议在过滤器上加上时间筛选,每天下一部分,或是多个账号同时分批下载,不然不可能下完。

参考:_filter = 'from:whyyoutouzhele filter:links -filter:replies until:2024-09-01 since:2024-08-01' 该样例为 从24-8-124-9-1 ,可以根据实际推文量修改日期间隔

zheqiaochen commented 1 month ago

这是因为账号调用次数超限了 image

//另外不用开启text_down选项,这是用来单下文本内容的

这个账号的推文量太大,一次性下载不太现实,我建议在过滤器上加上时间筛选,每天下一部分,或是多个账号同时分批下载,不然不可能下完。

参考:_filter = 'from:whyyoutouzhele filter:links -filter:replies until:2024-09-01 since:2024-08-01' 该样例为 从24-8-124-9-1 ,可以根据实际推文量修改日期间隔

再次感谢您的解答!确实分批下载会是一个更好的解决方案,我关闭这个issue了