9.png

8260365e

GF  2023-09-03 22:42
(图床教程 - https://level-plus.net/read.php?tid-2046937.html)

twMediaDownloader挂了,分享下本人现在在用的爬取Twitter的办法

今天看到twMediaDownloader的作者風柳停止继续开发了,在推特被马一龙接手后开始这个插件不太好使了
先是出了[API 34]错误的消息,再然后能用一段时间后就没法爬取媒体文件了
最后找了gallery-dl做为代替,下面讲一下怎么用吧
gallery-dl需要一些命令行JSON的知识,尽量先了解关于这部分的知识再往下看

下载地址: https://github.com/mikf/gallery-dl/releases/latest/download/gallery-dl.exe

把文件放到一个文件夹,然后按住Shift+鼠标右键,在此处打开PowerShell窗口
输入
复制代码
  1. gallery-dl --version

回车,能看到类似下面的输出说明可以使用了
复制代码
  1. 1.25.8


基础的用法:
复制代码
  1. gallery-dl [params] <url>

其中[params]是可选的参数,<url>是推文的地址,也可以是推文作者的地址

下面是一些常用的参数讲解
  • -K / -list-keywords:这个参数可以看作品可以使用的关键字,比如标题、发布日期等等,可以用到--filter以及--filename这两个参数等
  • -D / --directory:这个参数可以强制所有的爬取作品指定到下载路径
  • -f / --filenmae:指定下载文件的命名格式,比如
    --filename "{tweet_id}_{filename}.{extension}"
    可以命名文件为「作品id_文件名.文件扩展名」的格式,关键字要加花括号
  • --filter:这个参数可以过滤你需要的作品,比如
    --filter "date > datetime(2023,8,15)"
    可以下载指定晚于2023年8月15日的作品,后面的字符串用的是python语法


这里介绍一个比较实用的技巧
如果之前已经爬取过一个作者的所有文件的话,如果现在需要更新新内容的话只需要使用下面的命令
复制代码
  1. gallery-dl --filter "tweet_id > <tweet_id>" <url>

其中<tweet_id>是你上次爬取的最近文件的推文ID
比如你在9月3号爬取截至这个内容https://twitter.com/furyutei/status/1698286831283134966
那么填写
复制代码
  1. gallery-dl --filter "tweet_id > 1698286831283134966" https://twitter.com/furyutei

就能爬取这个推文之后的文件了

但是掌握这些还不够,最好整个配置文件
配置文件的位置在~/gallery-dl/config.json
如果是windows的话,这个文件需要被命名为config.json并且放置在个人文件夹下的gallery-dl目录下
不知道个人文件夹的话打开资源管理器,在地址栏里面输入%UserProfile%
配置文件的内容可以以官方的配置为基础来做改动
下载地址:https://github.com/mikf/gallery-dl/blob/master/docs/gallery-dl-example.conf

找到下面爬取twitter的部分
复制代码
  1. "twitter":
  2. {
  3.     "#": "write text content for *all* tweets",
  4.     "postprocessors": ["content"],
  5.     "text-tweets": true
  6. },


其中"#"是注释,用来说明这部分的功能是怎么样的,可以删掉
"postprocessors"开启脚本爬取完文件后脚本继续处理,可以添加多个处理
"content"是处理的名字,可以看后面的"postprocessor"了解到这段功能就是在爬取推文
"text-tweets"为true开启所有推文爬取,无论推文是否包含媒体

这里我不需要示例里的内容所以全部删除掉,替换成以下的内容
复制代码
  1. "twitter":
  2. {
  3.     "#": "twMediaDownloader like name format",
  4.     "filename": "{author[name]}-{tweet_id}-{date:%Y%m%d}_{date:%H%M%S}-{num}.{extension}",
  5.     "#": "import twitter cookies from browser",
  6.     "cookies": ["firefox", "/path/to/firefox/profile"]
  7. },


"filename"是非常常用的参数,他可以规定爬取的文件怎么命名,我使用了类似twMediaDownloader的命名格式
这些参数当前(23/9/3)还是有效的,如果内容有变,请参考下文自行定参
以这条推文为例:https://twitter.com/furyutei/status/1698286831283134966
  • author[name],推文作者的id:furyutei
  • tweet_id,推文的id:1698286831283134966
  • date:%Y%m%d,推文发布的日期:20230903
  • date:%H%M%S,推文发布的时分秒:104827
  • num,第几个媒体文件:这条推文只有一个媒体文件,所以是1
  • extension,文件的扩展名:jpg


组合之后的文件名:furyutei-1698286831283134966-20230903_104827-1.jpg

更多的可以使用的命名参数可以使用下面的命令查询
复制代码
  1. gallery-dl -K https://twitter.com/<tweeter>/status/<tweet_id>

<tweeter><tweet_id>替换成用户名和推文id

而更多可用的命名格式可以查看下面的文档
https://github.com/mikf/gallery-dl/blob/master/docs/formatting.md

"cookies",这个参数可以让脚本使用cookies,有两种使用方式
  1. 固定的cookies,适用服务器之类的使用场景
  2. 从浏览器导入的cookies,适用PC之类的使用场景,省去了查询cookie键值


第一种方法,可以参考示例文件中的exhentai的部分把cookies的键值对填入就行了:
复制代码
  1. "cookies":
  2. {
  3.     "auth_token": "12345",
  4. },


文中使用第二种方法:
本人只使用过firefox导入的方法,基于firefox的浏览器也行(比如Waterfox)
只需要把/path/to/firefox/profile替换成你浏览器的配置文件夹的路径就行了
Windows应该在%AppData%\Firefox\Profiles\xxxxxxxx.xxx
其他浏览器请自行参考官方文档和互联网资料

详细的配置文档
https://github.com/mikf/gallery-dl/blob/master/docs/configuration.rst

顺便一提,gallery-dl不只是能爬取twitter,他还能爬取很多网站的媒体文件
比如sankaku,danbooru,exhentai,pixiv,fanbox,fantia,kemono,patreon,misskey等等这些网站
也就是说只要学会一次这个软件,那么很多时候可以用这个软件通吃现在流行的图站
这点还是很赞的

none.gif

sakuraaini

B1F  2023-09-04 10:03
先马克,大佬666