python爬取文章保存_爬取博主所有文章并保存到本地(.txt版)--python3.6
闲话:
一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份。
正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想法——用爬虫保存自己的所有文章
在查了一些资料后,慢慢的有了思路。
正文:
有了上面的思路后,编程就不是问题了,就像师傅说的,任何语言,语法只是很小的一部分,主要还是编程思想。于是边看语法,边写程序,照葫芦画瓢,也算实现了既定的功能:
1、现在py文件同目录下创建一个以博主名字为名的文件夹,用来存放爬取的所有文章。
2、暂时先保存成TXT文件,这个比较容易。但是缺点是无法保存图片。后面在学习直接转成PDF。
3、爬取完成后提醒我你爬取了多少片文章。
要懒就懒到位,最好不要让我动一下手就自动爬取所有文章,但是。。。。还是要看一下自己的文章目录的url吧、看一下自己有多少页目录吧,然后这两个参数填进去之后,就完美了。
提示:使用chrome浏览器,在chrome下:先按F12进入开发者模式,在网页上右键选中一块区域,然后选择【检查】,在右侧即可查看对应的HTML程序。
主要函数的实现:
1、获取所有文章的url:
defget_urls(url,pages):"""获取所有目录下的所有文章url
:param url: 某一页目录的url,去掉最后的数字
:param pages: 一共需要爬取的页数
:return: 返回所有文章url的列表"""total_urls=[]for i in range(1,pages+1): #根据一个目录的url找到所有目录
url_temp= url +str(i)
html= get_html(url_temp) #获取网页源码
title_pattern= re.compile(r'',re.S) #文章url正则表达式
url_temp2= re.findall(title_pattern,html) #找到一个目录中所有文章的网址
for _url inurl_temp2:
total_urls.append(_url)#所有文章url放在一起
return total_urls
关于正则表达式的选择:这是我目录中的两篇文章标题的HTML程序:
可以发现,都在一对a标签下,class属性为:"postTitle n",其href属性就是文章的url网址。
所以正则表达式可以写为:re.compile(r'',re.S)
最后调用append方法,将所有文章的url放在一个list列表里面。
2、获取文章标题:
defget_title(url):"""获取对应url下文章的标题,返回标题
:param url:
:return:"""html_page=get_html(url)
title_pattern= re.compile(r'()(.*)()')
title_match=re.search(title_pattern,html_page)
title= title_match.group(2)return title
这个也很简单,检查元素我们可以发现:
与上面一样,这个正则表达式可以选择:re.compile(r'()(.*)()')
然后保留其第二个分组就是文章标题。
3、获取正文:
defget_body(url):"""获取url下文章的正文内容
:param url:
:return:"""html_page=get_html(url)
soup= BeautifulSoup(html_page,'html.parser') #HTML文档解析器
div = soup.find(id = "cnblogs_post_body")return div.get_text()
使用BeautifulSoup模块,创建一个对象,然后使用 soup.find()方法,搜索ID为 "cnblogs_post_body"的标签,返回标签内的文档内容。
4、下载单个文件:
defsave_single_file(url):"""首先在py文件同目录下创建一个以博主名字为名的文件,用来存放爬取的所有文章
将文章正文保存在txt文件中,名字为文章标题
有些文章的标题可能不适合直接作为txt文件名,我们可以忽略这些文章
:param url:
:return:"""
global article_count #使用全局变量,需要在函数中进行标识
title =get_title(url)
body=get_body(url)#获取当前目录文件,截取目录后,并自动创建文件
FILE_PATH = os.getcwd()[:-0]+author+'_''text\\'
if notos.path.exists(FILE_PATH):
os.makedirs(FILE_PATH)try:
filename= title + '.txt'with open('D:\learning python\coding_python3.6\cnblog\\Andrew_text\\'+filename,'w',encoding='utf-8') as f:
f.write(body)#正文写入文件
article_count+= 1 #计数变量加1,统计总的下载文件数
except:pass
print(title+"file have saved...") #提示文章下载完毕
对于 os.getcwd()方法,
如果a.py文件存放的路径下为:D:\Auto\eclipse\workspace\Testhtml\Test
通过os.getcwd()获取的路径为:D:\Auto\eclipse\workspace\Testhtml\Test
使用os.getcwd()[:-4]截取到的路径为:D:\Auto\eclipse\workspace\Testhtml\ ,注意这个-4是在当前目录字符串下,向前截取4个字符后的目录。不想截取的话,直接省略数字,但是要有 [:]
使用下面的命令则在3步骤下新建文件夹,名为:变量author_text:
#获取当前目录文件,截取目录后,并自动创建文件
FILE_PATH = os.getcwd()[:-0]+author+'_''text\\'
if notos.path.exists(FILE_PATH):
os.makedirs(FILE_PATH)
5、最终下载:
defsave_files(url,pages):"""调用单个文件保存函数,循环保存所有文件
:param url:传入任意一个目录的url,但是要注意去掉最后的数字。
:return:"""total_urls=get_urls(url,pages)print("get all the urls..."+'\n')print(total_urls) #获取的文章url正确
for urls intotal_urls:
save_single_file(urls)#输出下载的总文章数
print('\n' + "total article count is :%d"%article_count)
运行结果:
参考资料:
python爬取文章保存_爬取博主所有文章并保存到本地(.txt版)--python3.6相关推荐
- 我爬取了CSDN总榜TOP10博主的2万多篇文章,看看他们为什么这么火
前言:受到明佬<CSDN文章漫游者>的启发(←造福C站全体用户,最新版文章漫游者v0.3开放下载,赶快体验吧!),笔者将 CSDN 总榜 TOP10 的大佬们的文章数据爬了下来,分析一波大 ...
- DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章)
DayDayUp:三观一致必将取代血缘关系,成为新的人际纽带(博主推荐文章) 导读 考察一个人的判断力,主要考察他信息来源的多样性. 有无数的可怜人,长期生活在单一的信息里,而且是一种完全被扭曲的,颠 ...
- 本博客的博主原创文章均采用 CC BY-NC-SA 4.0 进行许可
本博客的博主原创文章均遵循 CC 4.0 BY-SA 版权协议,所有与之冲突的版权协议均为无效协议.
- python爬取文章保存为txt_爬取博主所有文章并保存到本地(.txt版)--python3.6
闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...
- 爬取博主所有文章并保存到本地(.txt版)--python3.6
闲话: 一位前辈告诉我大学期间要好好维护自己的博客,在博客园发布很好,但是自己最好也保留一个备份. 正好最近在学习python,刚刚从py2转到py3,还有点不是很习惯,正想着多练习,于是萌生了这个想 ...
- python xpath爬取新闻标题_爬取知乎热榜标题和连接 (python,requests,xpath)
用python爬取知乎的热榜,获取标题和链接. 环境和方法:ubantu16.04.python3.requests.xpath 1.用浏览器打开知乎,并登录 2.获取cookie和User-Agen ...
- python爬取文献代码_爬取Pubmed文献及影响因子并尝试下载的脚本
Abstract 本脚本实现了通过Biopython爬取pubmed文献资料,并通过scholarscope爬取影响因子数据,最后尝试通过sci-hub下载文献,三位一体的方法. Introducti ...
- java爬取彩票数据_爬取彩票信息(有空试下)
暂且不说,彩票预测是否靠谱?彩票预测也分人而异,江湖上骗术很多,有些甚至会误以为彩票预测的准确度可以很高,这些操盘手法,让不知原理的彩民心甘情愿地掏钱买料. 在彩票预测上,也有正儿八经去研究" ...
- opencv中的imwrite如何保存_如何把公众号的文章用文档保存到电脑中?
虽然很多人说现代人是被手机支配的低头族,但我们确实也能从中获取很多有用信息,特别是很多专业领域的人士都会通过微信公众号分享一些经验,有时看到一些优质的文章要如何才能保存到电脑中呢? 首先打开我们需要保 ...
最新文章
- CV:利用cv2自带两步法haarcascade_frontalface_default.xml、_smile.xml实现对人脸、笑脸同时检测
- C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
- html 换行符_每个非网站开发人员都应该了解的21个HTML基础知识
- python数据库操作sqlite_Python操作mysql和sqlite
- BIO和NIO的区别
- JavaScript--数据结构与算法之二叉树
- 面向内网无纸化会议/智慧教室/实时同屏,组播还是RTMP?
- jmeter html 乱码,jmeter压测学习14-jmeter返回内容中文乱码问题
- 调试工具_Apifox for Mac(接口调试管理工具)
- dw中html5快捷键,DW快捷键大全
- 一种基于频域滤波法消除干扰项与角谱法重构技术的数字全息显微台阶形貌测量实例分析
- python游戏脚本 魔兽世界_浅析LUA中游戏脚本语言之魔兽世界
- 导入matplotlib.pyplot as plt画图问题Matplotlib created a temporary config/cache directory at /tmp/matplotl
- java请假系统毕业设计_毕业设计学生管理请假系统.doc
- Python发送QQ邮件常见报错和代码
- 求矩形槽内电位分布matlab,MATLAB超松弛迭代法求解接地金属槽内电位分布
- (已解决)windows和linux系统中使用 pycharm 时设置打印字体颜色和背景色
- 未来 3 年,什么样的技术人,最有机会年赚 100万?
- win10 计算机 搜索文件,在 Windows 10 上高效搜文件,自带搜索功能其实就够了
- 蓝牙一段一段_不用担心,它在那里存在了一段时间
热门文章
- python字典get计数_python字典中的get方法与setdefault方法
- ASP.NET 4.0 新特性--Web.Config Transformation(原创)
- SpringCloud系列十二:SpringCloudSleuth(SpringCloudSleuth 简介、SpringCloudSleuth 基本配置、数据采集)...
- 代码编辑器——sublime
- 你可能不需要一个 JavaScript 框架(二)
- Xamarin.Android模拟器提示HAX kernel module is not Installed
- 【编码】-小Ho的防护盾-2016.08.14
- 算法模板——二分图匹配
- 给你的博客添加个看电影的频道
- SpringSecurity权限表达式