00:00
呃,大家好,今天给大家讲一下,就是我今天呃下午从六点钟呃花两个小时左右,呃写了一个小工具,这工具就是呃Python爬虫,爬去我自己的博客的所有的文章啊,因为我就是说万一有一天我的博客呃挂了或者怎么样子的,呃我的文章没有及时保存下来啊就完了,所以说我想去爬一下这个里面的所有的文章,呃但是我当时我没想写来着,后来我去查了一下,我说呃Python爬虫typebaco,因为我的博客的框架是typebacco,但是并没有这样的呃程序也就是说没有人。呃,去爬博客的一个爬虫,所以我就没办法只成自己写了啊好,那么呃这个其实这个工具的话,你呃如果说你的博客也是开不开口创建的,那么是可以直接用的,因为不管比方说我,因为我们的主题虽然是不同的主题,就是说你前端这样展示的样子是不同的,但是我们的后端其实都是一模一样的,都是这样子,并且啊大家都是这样子的,所以说呃,因为我们的后端是相同的,所以说呃就可以复用这个代码是所有Taco。
01:17
博客用户都可以用的,就把你的文章copy到本地啊,但是呢,我前提要说明一点,就是说因为我的文章基本上全部都是用markdown写的。呃,Markdown写的,所以说我的呃保存下来也是markdown格式,那如果说你是用的,呃,比方说word写的,那可能就不太适合你,因为啊这里面会有一些问题,好,呃,那我就开始说一下吧,首先这个主要里面就是一个慢函数,慢函数里面有三个参数。就是一个URL啊page page这表示什么意思呢?这个首先说一下URL吧,呃,这个URL呢,并不是你的一个啊主页的一个URL,而是你就是当你登录进来的时候。
02:02
也不是登录进来的这个URL,而是管理在文章啊,这个URL是这样的一个URL。呃,这个UR输入进来之后呢,啊呃,Page number start和end表示什么意思呢?表示说你是从第几页呃到第几页,比方说我啊,把这个第呃从第二页开始,就是第二页的所有的文章一直到第三页啊,所有的文章都copy下来,那么这里就写上二呃呃这里。这里传个二,这里传个三,它是它这个区间是左闭右闭的,因为呃我设置是这样的,虽然我个人呃经常用的是左闭右开,但是呃啊怕大家不太理解了,所以我就设置了左闭右闭,好呃那么进去以后呢,首先呃就是如何登录的这个问题,呃我不是用的账号密码去登录的,我是直接用的C,呃cookie就是你NF12啊刷新一下,然后这里有呃在这里有个。
03:04
啊,这个地方我给大家看,其实是没有关系的,因为只要当我登出网站,然后再重新登录的时候,这个cookie就换了,所以说大家去copy我的cookie是没有用的啊,就把这个cookie呢啊,定义一个字典,把这个cookie啊cookie,然后把这个东西这里全部copy过来,放在这后面非常长一串啊,然后呢,用这个方法去放到筛选里面去。啊section cookie啊,Cookie放进去就可以了,那么这样的话,你去用section get ul就会直接录进去就没有问题,如果你是没有登录的话,没有没有cookie的话,是登录不进去的,也就看不到这样的页面了,好,那么对于这个爬虫来说,他看的其实不是这样的一个页面,他看的是什么呢?看的是源代码,也就说对于爬虫他看的是这样的东西,然后呢,我现在还有个还有个需求啊,不好意思,我刚水杯差点掉了,还有个需求就是说呃。
04:03
我想要去建立一个文件夹,叫做blog啊,然后呢,我在blog里面再建立一些文件夹,这个文件夹的命名是什么样子呢?就说我这个文章有多少类啊,像这个类别里面,分类里面,我这个文章有多少类,我就要去建多少个呃文件夹,并且文件夹的名字都是要以这个类名来命名的啊,就是这样子,比方嗯,好,那这个怎么做呢?首先我们不是登录进来了这个嘛,然后呃,然后呢,爬虫看到是这样的页面,其实我就发现它在这个页面里面就天然的会有呃他所有的这个呃类别,所以我就只需要把这个option,所有的这个option获取就可以了,那么我就获得所有类别,但是呢,这个地方有个问题,就是说呃。这些确实是我的类别,而这个呢,它算是一个呃,开头吧,或者是什么东西,反正它并不是我的一个类别的名字,就是所有人都会有的,估计叫所有分类啊,这个是我是不需要的,所以说但是很简单,你只要去比方说你用一个list把它全部存储之后呢,你要从第一个而不是从第零个开始,你从第一个开始一直到最后就可以了。呃,那么这里就非常简单啊,Suit in find all option,它会返回一个list,叫做呃类别,那么这个就全部放进来了,放进来之后呢,我从第一个开始编历啊,去创建文件夹,创建文件夹的话,这里就自己写,随便写了一个函数就OK了,os.make d,然后把这个路径传进去就可以了。呃,这里有有一些问题,等会儿我最后会讲,呃,好,那么这样的话,整个文件夹就理完了,那么这个运行就是说程序运行到这里啊,其实实实现了一个什么效果呢?就是你。
05:46
你会你的地盘底下会有个叫做blog的一个呃目录,然后这个目录底下呢,会有一些目录,这个目录呢,是以你的这个类别为名字创建的,而且里面都是空的,因为还没有没有文章进去。
06:01
好,那么接下来就是获取文章了,就是比较重要的地方了,那我刚说了我要获取第啊start到end的文章,怎么获取呢?大家可以看一下这里啊,它这个右下角是不是有个123,然后一直到你这个所有的呃页码对吧,然后你再去看这啊啊这里。它这个页码其实是用一个问号,然后page等于多少来来访问的,比方说我现在是呃,我现在是第一页对吧,那我就配置二,那它等会就会跳整到第二页了啊,是不是就整到第二页了啊,所以说我就只需要把这个URL啊放进去,然后去就可以了,因此这方简我就只需要呃把这个ul,然后问置等,然后把这个的呃I就可以了,方说啊点一下访问,然后在这获取文章是吗?这样其实是不太好的,因为呃前端的文章它都是经过HTML渲染的,那么大家可以看一下它渲染成什么样子了。
07:13
啊,渲染成这个样子,就是我是用呃,Markdown格式写的一个文章,它全部渲染成这个样子,比方说呃,我是一个四号标题的一个呃呃呃,那么它会有一个什么H4来这样子啊,你如果说你自己慢慢一个一个去匹配,去匹对呃匹配这样子去修改也可以,但是这样太麻烦了,所以说用前端的话,嗯不太好,那我去就去后端去获取这个文章,后端获取怎么获取呢?比方说呃,对于这个文章,我点开它,大家看一下这个里面这个内容是不是就非常的呃就是完全就是一个markdown格式的文章,对吧?并且看一下它的源代码啊,它这个源代码也是你知那是不是就是非常简单的一个呃,Markdown的一个源代码。
08:03
就只需要获取这个啊就就可以了,所以说我就去后端去获取文章,那么首先我要去啊,说的太快了,首先呢,呃,我现在还是。到这里来。然后这个是第一啊,那我现在是处在这个页面对吧,我去get articles就是获取文章,那我现在是呃,在这个页面,在这个页面当中,我用beautiful so也是一样的去获取这个页面的源代码,那就是这个页面的源代码就是这里。好,那我其实程序看到的是这样的东西啊,这里前面就是我已经说过了,就是类别,那我后面要去获取文章,并且是后端的文章怎么获取呢?大家可以看一下呃。这个比方说我第一篇文章是详解对吧,那么这里就有一个详解啊,然后后面是呃,那么后面这个也是sentence transform啊,就是说它会全部排在这里排好了,并且大家可以看到前面会有一些超链接啊,这个超链接点进去其实就进入了后端了啊,对吧,就进入了这个文本的这个编辑的页面了,所以说我只要怎么做呢啊,获取这个里面的所有的这个东西不就完了吗?比方说这是第一页的对吧,我把这个第一页里面的啊,这个链接全部都获取出来,然后再把呃。
09:31
第二页的链接都获取出来对吧,就呃先就达到一定的目的了,那首先我就是先啊用什么呢?呃,我去用这个,So,就是这个页面的源代码点T,呃,为什么呢?因为这个地方。大家看到这里全部都是用T包底,它是包起来的,最后一个T包底在哪呢?在我找一下。
10:00
T body啊,在这里就要去获取t body的TR啊,因为t body底下。它是TR类别。啊好,然后TR呢,我再用这个方法,呃,这样子,它这个东西它整个返回的就是一个迭代器,迭代什么东西呢?呃,你这个东西是你迭代期的第一个元素,这个东西是迭代期的第二个元素,它会把这个,因为它这个TR啊,全都同级别的,这个T和TR它是子子节点,就是说TR是T的子节点,是H的一个,呃标签嘛,而这个TR和这些所有的其他的TR他们是同一个级别的。啊,所以说我要去获取这个迭代器,让我去迭代这个TR啊就可以了,呃后面的话就是说,呃,因为它迭代的时候呢,有一些问题啊,所以我要判断一下它是否是tag类型的,这个tag类型是beautiful so,呃,Element里面的tag这个类型,呃大家到时候如果去自己调试一下就好了,呃这个我就不详细说了,然后呢,这个tr.contents里面五,然后点A啊her就是它的超链接啊,就是这个就是这个的超链接,还有呃这个的超链接,反正全部都是后端的文章的一个超链接,然后呢,呃,这个点CONTENT0,它表示什么呢?呃,它表示的就是你的title啊,为什么要获取这个title呢?因为我想要以就是呃,比方说我最后呃就是Java,然后这个Java里面呢,我想。
11:51
个文章的标题来作为这个呃文件的名字,所以我要获取它的title啊这样子,所以我获取title和我的这个文章编辑的这个页面啊,以及title还有它的类别啊,为什么要获取这个文章的类别呢?类别在这里啊,Learning啊learning等等等等啊,还有杂谈之类的啊,因为我要就是说我想让呃某一类别的文章去保存到那个类别的文件夹里面去,那比方说Java的文章,它就会保存到Java文件夹啊数学的文里去夹样个剩话问这个,然后呢,你获了之后,你去访问这个呃文章的URL,比方说我现在啊,就先因为我是循环嘛,对吧,我这里循环的话,那我就比方说我现在现在进入的是第一个文章的URL,嗯,那就在这儿啊,进入这了之后呢,呃,我再去去获得他的语言代码,也就是这个页面的。
12:51
代码。在这个页面源代码当中呢,我就只需要把这个呃,Text area就是text区域,还有这个呃反斜杠test的区域,我就把这个区间里面的文本全部获取出来就可以了,那就用一个呃呃,大家先看一下。
13:14
啊,就是在test area.content就把这个整个这个文全部来了,或说有一些换行符去掉的就去掉,呃,这地方等会我再讲,这地方等会我再讲,然后去保存就可以了,保存的话你就需要你的内容对吧,你的正文的内容,以及你这个文章的标题,并且标题要作为你这个呃文件的名字函说这个文件的名字,还有你的文章的类别,类别就是你指定要保存到一个文件夹里去,然后来看一下这个S这个函数啊S函数就非常简单了,首先你的呃,你的保存的这个名字啊,你要拼一下对吧?MD文件,呃,因为是markdown文件嘛,然后你open这个啊,打开这个文件,然后去保存就可以了,然后把这个内容写进去就OK,那么其实整个这个东西也就也就结束了,这个代码就讲解到这儿,呃,那么其中会有一些问题啊。
14:09
首先第一点就是说呃为什么不直接通过文章的一个呃CIID来访问,因为大家可以看到就是就是这个原代码,大家可以看到,其实你这个文每一个文章都是我cid的,然后说你这个呃,Write post PHP,然后问号CAD等于1497,那比方说我再改一下1496啊,1495其实都是不同的文章,对吧,1494,再比方说呃780啊等等都是不同的文章,那为什么我不直接通过这个来呃循环遍利就完了呢?因为其实是有的人有这样的需求方,我可能不是说呃个一年半年就行一下,我可能方说我一个就新增存,呃就是有这样需求还问题就存C。
15:10
情况,比方说什么情况呢?就是说然后你设是七百八对吧,然后你再新建一个文章,那么它的标号就是781了,但是如果你把这个781这个文章删掉了,然后你再去建一个文章,那么这个新的文章它的就是782了,那么呃,你这个781这个的这个文章就永远的消失了啊,那你去访问他就是404,比方说我也不知道我哪个文章不在了,我去随便找一下啊,1000号还在是吧,千01的啊,这也在,呃,我也不记得我哪个文章不在了,500啊,那这是404了,所以说这个也不太好,那么就是因为这两点原因,让我就没有直接通过cid去访问。呃,第二个问题就是说,如果字当中包含S目录,呃,以及文件不允许字符怎办?那其实我这里解决了就是说,呃,Windows目录啊,它其实有一些东西它是不不允许的,比方说。
16:05
像这些字符它是不能包文件夹文件不能字符么呢些字符,如果说你的这个呃分类呃里面包含这个字符的,那我就全部换成空格,比方说我这里有一个很有意思的一个东西啊,就是在我这个分类里面有一个叫C-C加加这个目录,那如果说我直接把这个名字下来,然后去呃生成这样的一个文件夹的话,它其实生成的并不是C-C加加,它生成的会是一个呃,是一个这样的生成一个C,然后在C里面再生成一个C加加,它会生成这样的一个呃目录结构,但是我并不需要的这样的目录结构,我需要的是C机告诉大家呃它就会出问题,所以说我在这里就进行一个check检查,在所有每次要保存之前,我先查查斜杠允字符部给它。
17:05
切换成空格啊,这样的一个情况就可以了,呃还有就是说,如果说你有文章是没有分类的,那么它就会报错,呃,因为你文章没有分类,他就不知道保存到哪里,对吧?还有就是说他在这里访问的时候,它会呃它会报错,因为没有这样的一个类别是会有这样的情况,当你的类别你忘了去添加的时候,它会是空的,空的话那就会有问题,所以说绝对不能够允许有未分类的文章,大家这呃呃要保证一下,其次的话就是说,如果你有呃内容为空的文章也会报错。啊,比方说我这里新建一个文章啊,叫做A啊,它会默认呃放到杂台下面,那假如说我把这个勾取消掉呢?啊,他还是在讲呃,那我这里没有任何的内容,我类别有标题有,就是没有内容他也会报错,因为这里它会获取到内容,如果你的内容是那的话,那么后面的话就会报错,所以说我在这里就判断一下,如果说你的呃内容是空的话啊,就是你的长度是零,那么我就呃默认的给你添加一个呃空格进去,单个空格字符添加进去,呃这样的话就既然既能够保证你呃你的文章能够全部爬到啊这样子比较好,嗯啊大概就这样子吧,我想的话应该就呃没有什么别的问题了啊还有如果说你比方说你想从第二页呃开始爬,爬到第三页啊,这也是我说的,你就改下这里就可以了啊,剩下的就啊没什么。
18:43
呃,再强调一点啊,如果你的博客也是抬牌口的,你其实是可以直接使用的,应该呃,当然如果你使用的话有什么问题,呃可以给我呃提一下依旧,到时候我会把这个呃代码上传到github,然后我会把getub链接放在呃视频下方,好,那么本期视频就到这,谢谢大家。
我来说两句