起因
昨天中午正在舒舒服服的浏览着大佬们的博客,突然寝室又停电,WiFi也断了,还能不能愉快的玩耍了???虽然学校是有名的停电停网停水大学,但是每天中午停一次电也太难受了吧。难道是给新来的学弟们一个下马威,提前了解学校?
于是想着能不能把博客下载保存到电脑上随时可以查看。
开始动手
首先查看csdn,就拿我的来分析
- 首先要找到博主所有文章的url
看到了所有的网址都有,那我们就需要想办法把url提取出来,所以我们这里用css选择器
url_list=sel.css('.article-list a::attr(href)').getall()
- 得到了所有文章的url,接下来就是把这篇博客下载下来。因为下载下来的内容是html类型,不是我们看到的markdown类型,所以这里我们还需要一个html转换为markdown形式的库,还好有大佬已经做好了这个库–tomd,用pip install tomd就可以安装了。
找到了文章的标题和内容,还是用css选择器提取,再用正则去除一下多余的网页标签,完整的文章就下载下来了。
完整代码
import requests
import parsel
import tomd
import re
import os
def download_userall(user_name):
os.mkdir('./csdn博客/{}'.format(user_name))
page=1
while True:
index_url='https://blog.csdn.net/{}/article/list/{}?'.format(user_name,page)
response=requests.get(index_url)
html=response.text
sel=parsel.Selector(html)
url_list=sel.css('.article-list a::attr(href)').getall()
#print(url_list)
if not url_list:
break
for url in url_list:
download_boke(url)
page+=1
print("正在爬取第{}页".format(page))
def download_boke(url):
response=requests.get(url)
html=response.text
sel=parsel.Selector(html)
title=sel.css('.title-article::text').get()
content=sel.css('article').get()
#转化为markdown
text=tomd.Tomd(content).markdown
#去除网页标签
text=re.sub('<a.*?a>',"",text)
text = re.sub('<b.*?b>', "", text)
text = re.sub('<br.*?br>', "", text)
text = re.sub('<li.*?li>', "", text)
#保存md文件
with open("./csdn博客/{}/{}.md".format(user_name,title),mode='w',encoding='utf-8') as f:
f.write("# "+title)
f.write(text)
f.close()
if __name__ == '__main__':
user_name=input("请输入博主的user_name:\n")
download_userall(user_name)
运行结果
成功的把所有博主的所有博客都爬取下来了,需要爬取不同的博主只需要输入不同的user_name就可以啦