作者的bb:
有问题/报错提issue,不知道怎么提issue可以直接邮箱找我:ishtartang@163.com(但是不要在提了issue之后又给我发邮件),得说清楚你用的哪个程序,报错爬的链接,报错长啥样(截图或者复制报错内容),我debug起来比较方便。
有的时候会懒得更新自述文件,所以配置项填写以代码里的注释为准。
以下是项目介绍:
项目中程序按功能分类为以下三种(顺利的话可点击跳转)
1 . 保存我的喜欢 & 保存我的推荐 & 保存tag下的内容
2 . 保存一个作者发布的内容
3 . 单篇保存
所有程序要设置的都在main里,划拉到程序最后面就是
保存作者和单篇保存是先写的,有些地方会比较粗糙。
先点开文件 login_info.py,这个文件是专门填登录信息的,lofter现在的页面都要求登录,这里填好可以同步到每个程序,不填其他的都跑不起来
登录方式 | login_key |
---|---|
lofter id 登录 | Authorization |
手机号登录 | LOFTER-PHONE-LOGIN-AUTH |
QQ登录 | LOFTER_SESS |
邮箱登录 | NTES_SESS |
微博登录 | 未知 |
微信登录 | 未知 |
微博登录和微信登录的Key都还不知道,如果有人需要这两种登录方式需要你配合帮我找找key才行。
点开lofter主页或者喜欢页,按F12召唤开发 者工具,按Network,按XHR,往下划拉几下会加载一个文件,点它
点Cookies,找你登录方式的 login_key,比如这里是用手机登录,所以就找LOFTER-PHONE-LOGIN-AUTH,把右边的值复制下来,粘贴到代码里
程序 l13_like_share_tag
共四种运行模式,like1
, like2
, share
, tag
like1
和like2
:保存点过的喜欢,区别是2有一个额外的功能
share
:保存所有点过的推荐
tag
:保存一个tag里的内容,只能保存前1200条内容(已经找到能获取更多的办法,但是那得解析移动端端口重写,实在是没时间,将就用吧)
基本使用只要设置三个地方,url,mode,save_mode
like1
、 like2
和 share
模式的url是你个人主页的链接。链接中有的时候有表单,比如 https://ishtartang.lofter.com/?act=qbdashboardlike_20121221_01 ,要把问号和后面的都删掉,变成 https://ishtartang.lofter.com/ 。
tag模式需要的是tag链接,tag链接有5种结尾,分别是 最新(new)、热度总版(total)、月榜(month)、周榜(week),日榜(date),这些都可以,放那个获取得就是哪个,浏览器直接点进tag的链接是没有最后一截的,会指向最新。
tag链接中有中文复制下来会变成编码,是正常的。
启用哪种模式,like1
、 like2
、 share
和 tag
使用like1
和share
前需要把自己的lofter推荐和喜欢设为公开,非公开的话可能会爬不到
保存模式,要保存哪些内容
lofter的博客有5种类型,这个爬虫可以爬到文字、图片、长文章。音乐和视频我没想弄。
文字我分类成了有标题的和无标题的,有标题的叫文章,无标题的叫文本。
四个保存项,1为保存,0为不保存。如图中设置就是:保存文章、文本、图片,不保存长文章
保存的图片的命名格式是 "作者名[作者三级域名] 发表时间(编号)"
三级域名就是每个人主页 https://xxxxxxx.lofter.com/ xxxxxx那一段,整这个是因为作者可能经常改名,但三级域名很少改,通过文件找作者的时候会方便很多。
保存的文章、文本、长文章的文件命名格式都是 "标题 by 作者.txt"
文件里有文件头信息和尾信息,头信息包括 标题,作者名,作者三级域名,发表时间,原文链接,该篇博客打的tag
如果文章里面带图片或者外链,链接会写在文件最后。有保存文章中图片的功能,后面说。
所有功能如果在生效阶段运行完后想要修改,必须将进度重置,重新运行该阶段
所有模式可用,只对图片和文章生效
功能 | 对应变量 | 变量类型 | 如何启动 | 具体描述 | 生效阶段 | 备注 |
---|---|---|---|---|---|---|
按tag分类 | classify_by_tag | 整型 | 1开启 0关闭 | 设作者打了 A,B,C 3个tag,启动该功能时会将该条博客的内容保存到名为A的文件夹下 | 阶段2 | 要爬的内容超过1000条时建议打开 |
优先tag | prior_tags | 列表 | 列表非空时为启动该功能 | 未启动按tag分类时该功能无效 设优先tag为C,B,D,作者打了A,B,C 三个tag,该条博客内容会按优先tag的顺序保存至文件夹 target/C 设优先tag为C,B,D,作者打了E,F,G 三个tag,按照作者第一顺位tag,保存至other/E下 |
阶段2 | 我自己整理了差不多200多个优先tag,个人建议顺序是cp - 角色 -作品 |
非优先tag聚合 | agg_non_prior_tag | 整型 | 1开启 0关闭 | 优先tag未启用时时该功能无效 如果作者打的tag中不包含优先tag,博客内容保存到other文件夹下。1为启动,0为关闭。 |
阶段2 | / |
仅like2模式可用
开始时间指定让like2的可用性高了很多,比如第一次保存了所有点过的喜欢,一个星期后把时间设置为上次运行的日期,可以只爬这一个星期里点过的 。
功能 | 对应变量 | 变量类型 | 如何启动 | 具体描述 | 生效阶段 | 备注 |
---|---|---|---|---|---|---|
开始时间指定 | start_time | 字符串 | 非空字符串时为启动 | 保存从指定时间到现在点过喜欢的博客,空为不指定 | 阶段1 | 格式为"yyyy-MM-dd" 举例:"2020-02-01" |
仅tag模式可用
功能 | 对应变量名 | 变量类型 | 如何启动 | 具体描述 | 生效阶段 | 备注 |
---|---|---|---|---|---|---|
最小热度限定 | min_hot | 整形 | / | 博客热度小于设定的热度则不会被爬取 | 阶段2 | / |
其他选项
选项 | 对应变量 | 变量类型 | 如何使用 | 具体描述 | 生效阶段 | 备注 |
---|---|---|---|---|---|---|
保存 文章/长文章/文本 中包含的图片 | save_img_in_text | 整型 | 1启动 0关闭 | 开启该功能后,会将文章中的图片保存到文章同已路径下,图片命名为文章标题+序号 | 阶段1 | 因为没有足够的文章用来测试所有这个功能出错的可能性挺高 |
tag统计输出过滤 | tag_filt_num | 整型 | / | 运行中会对所有博客的tag进行一个统计,输出出现次数超过设定次数的tag | 阶段3 | 用来看 |
输出等级 | print_level | 整型 | / | 等级1的输出多,0的输出少 | 啥时候改都行 | 设为1会把每一条博客的信信息都输出来,debug用的 |
文件设置 | file_path | 字符串 | / | 所有文件的存放路径 | 阶段1 | 默认为./dir,不用动 |
运行完一个阶段会保存进度,会有文件标识这个阶段已经完成,可以删掉文件来手动调进度。
阶段1:获取喜欢/推荐/tag页面的原始数据,获取完成存到fav_info,然后从里面解析出需要的数据存到format_fav_info.json。 需要一点时间,我的一共8000多条,获取加解析大概6分钟。
format_fav_info.json文件出现表示阶段1已运行完成。
获取阶段的实际返回条数比请求条数少,因为你点过喜欢/推荐/tag中曾经存在的内容,有些已经被屏蔽或者作者删除的,也会计算进去,但实际上已经请求不到了,一般来说时间约久消失的条数越多。(我的少了1/10,艹)
阶段2:
添加自动整理的信息,然后按照 图片、文章、文本、长文章分类,分类完后写到classified_fav_info.json。 大概一两秒。
classified_fav_info.json文件生成说明阶段2完成。
阶段3:对博客进行类型统计和tag统计,统计完后输出。很快,一两秒。
没有文件,目的是输出,每次运行都有这个阶段。
第三行是字典,每个tag具体出现了多少次,第四行是列表。 这有个小附加功能,用来辅助生成prior_tags的,具体看小工具 tags_tolist。
阶段3结束之后会暂停让你输个ok,退出就随便输点啥。
阶段4:保存
保存文章、保存文本、保存长文章很快,如果没开保存文本中的图片的话只要几秒就能运行完。 这三项没有进度文件,所以保存中断再启动会删掉已经保存的文件重新开始保存。
保存图片能自己记录进度,保存图片时断掉重启的话会自动读上次的进度,进度在img_save_info.json。 需要的时间比较长,差不多20-40分钟1000条图片博客,主要看图片多少。
如果图片存到一半,停止,修改了自动整理选项再启动的话,进度会自己重置到阶段2(这是整个程序唯一自动调进度的地方)
保存完成后有个问你删不删文件的,要是保存完了yes就行。 要是比如说你第一次没存长文章,跑完了突然又想存就no,再启动会从阶段3开始跑。
l4_author_img.py 和 l9_author_txt.py
l4是保存作者发布的所有图片,l9是保存所有文章和文本,有标题没标题的都可以
l4_author_img
l9_author_txt.py
这两挺像,因为l9就是拿l4改的,还从l4调了一堆方法
功能在注释里都写了,不做自定义设置的话把作者主页链接拷到author_url,运行就行
爬到的图片会在./dir/img/作者名
里面,图片命名方式是 作者名[作者lof的三级域名]-发表时间(序号)
文章在dir/article/作者名
里,文件命名格式是 标题 by 作者
;
文本和文章在同一路径,文件命名格式是 作者 发表日期(序号)
l8_blogs_img.py 和 l10_blogs_txt.py
这两没有要改代码的地方,改的是对应的文件,文件在./dir中
l8 对应 img_list l10 对应 txt_list
使用方法相同,把单篇的链接放进文件里,一行一个,直接运行程序就行
这两个是我以前用得最多的,不过保存喜欢的写出来之后就没怎么用了
tags_tolist.py:
这个是对l13生成prior_tag的一个辅助功能
在l13运行了一次阶段3之后会在./dir里面生成一个prior_tags.txt文件,里面是所有博客中tag数从多到少的排序,是tag过滤后的。
可以在里面排序/删除,排完运行tags_tolist.py会把你排好的变成列表(这里示范一下,没排),把输出的列表直接拷到prior_tag就行
为了避免排好之后忘记导出来就运行l13把文件覆盖掉,prior_tags.txt这个文件只会在文件不存在时生成,重新生成需要把文件删掉。
parse_template.py:l9和l10的xpath文字匹配模板