[Python爬虫] 简单网络爬虫抓取博客文章及思想介绍
前面一直强调Python运用到网络爬虫方面非常有效,这篇文章也是结合学习的Python视频知识及我研究生数据挖掘方向的知识.从而简单介绍下Python是如何爬去网络数据的,文章知识非常简单,但是也分享给大家,就当简单入门吧!同时只分享知识,希望大家不要去做破坏网络的知识或侵犯别人的原创型文章.主要包括:
1.介绍爬取CSDN自己博客文章的简单思想及过程
2.实现Python源码爬取新浪韩寒博客的316篇文章
一.爬虫的简单思想
最近看刘兵的《Web数据挖掘》知道,在研究信息抽取问题时主要采用的是三种方法:
1.手工方法:通过观察网页及源码找出模式,再编写程序抽取目标数据.但该方法无法处理站点数量巨大情形.
2.包装器归纳:它英文名称叫Wrapper Induction,即有监督学习方法,是半自动的.该方法从手工标注的网页或数据记录集中学习一组抽取规则,从而抽取具有类似格式的网页数据.
3.自动抽取:它是无监督方法,给定一张或数张网页,自动从中寻找模式或语法实现数据抽取,由于不需要手工标注,故可以处理大量站点和网页的数据抽取工作.
这里使用的Python网络爬虫就是简单的数据抽取程序,后面我也将陆续研究一些Python+数据挖掘的知识并写这类文章.首先我想获取的是自己的所有CSDN的博客(静态.html文件),具体的思想及实现方式如下:
第一步 分析csdn博客的源码
首先需要实现的是通过分析博客源码获取一篇csdn的文章,在使用IE浏览器按F12或Google Chrome浏览器右键"审查元素"可以分析博客的基本信息.在网页中http://blog.csdn.net/eastmount链接了作者所有的博文.
显示的源码格式如下:
其中<diw class="list_item article_item">..</div>表示显示的每一篇博客文章,其中第一篇显示如下:
它的具体html源代码如下:
所以我们只需要获取每页中博客<div class="article_title">中的链接<a href="/eastmount/article/details/39599061">,并增加http://blog.csdn.net即可.在通过代码:
import urllib
content = urllib.urlopen("http://blog.csdn.net/eastmount/article/details/39599061").read()
open('test.html','w+').write(content)
但是CSDN会禁止这样的行为,服务器禁止爬取站点内容到别人的网上去.我们的博客文章经常被其他网站爬取,但并没有申明原创出处,还请尊重原创.它显示的错误"403 Forbidden".
PS:据说模拟正常上网能实现爬取CSDN内容,读者可以自己去研究,作者此处不介绍.参考(已验证):
http://www.yihaomen.com/article/python/210.htm
http://www.2cto.com/kf/201405/304829.html
第二步 获取自己所有的文章
这里只讨论思想,假设我们第一篇文章已经获取成功.下面使用Python的find()从上一个获取成功的位置继续查找下一篇文章链接,即可实现获取第一页的所有文章.它一页显示的是20篇文章,最后一页显示剩下的文章.
那么如何获取其他页的文章呢?
我们可以发现当跳转到不同页时显示的超链接为:
第1页 http://blog.csdn.net/Eastmount/article/list/1
第2页 http://blog.csdn.net/Eastmount/article/list/2
第3页 http://blog.csdn.net/Eastmount/article/list/3
第4页 http://blog.csdn.net/Eastmount/article/list/4
这思想就非常简单了,其过程简单如下:
for(int i=0;i<4;i++) //获取所有页文章
for(int j=0;j<20;j++) //获取一页文章 注意最后一页文章篇数
GetContent(); //获取一篇文章 主要是获取超链接
同时学习过通过正则表达式,在获取网页内容图片过程中格外方便.如我前面使用C#和正则表达式获取图片的文章:http://blog.csdn.net/eastmount/article/details/12235521
二.爬取新浪博客
上面介绍了爬虫的简单思想,但是由于一些网站服务器禁止获取站点内容,但是新浪一些博客还能实现.这里参照"51CTO学院 智普教育的python视频"获取新浪韩寒的所有博客.
地址为:http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html
采用同上面一样的方式我们可以获取每个<div class="articleCell SG_j_linedot1">..</div>中包含着一篇文章的超链接,如下图所示:
此时通过Python获取一篇文章的代码如下:
import urllib
content = urllib.urlopen("http://blog.sina.com.cn/s/blog_4701280b0102eo83.html").read()
open('blog.html','w+').write(content)
可以显示获取的文章,现在需要获取一篇文章的超链接,即:
<a title="《论电影的七个元素》——关于我对电影的一些看法以及《后会无期》的一些消息" target="_blank" href="http://blog.sina.com.cn/s/blog_4701280b0102eo83.html">《论电影的七个元素》——关于我对电…</a>
在没有讲述正则表达式之前使用Python人工获取超链接http,从文章开头查找第一个"<a title",然后接着找到"href="和".html"即可获取"http://blog.sina.com.cn/s/blog_4701280b0102eo83.html".代码如下:
#<a title=".." target="_blank" href="http://blog.sina...html">..</a>
#coding:utf-8
con = urllib.urlopen("http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html").read()
title = con.find(r'<a title=')
href = con.find(r'href=',title) #从title位置开始搜索
html = con.find(r'.html',href) #从href位置开始搜素最近html
url = con[href+6:html+5] #href="共6位 .html共5位
print 'url:',url#输出
url: http://blog.sina.com.cn/s/blog_4701280b0102eohi.html
下面按照前面讲述的思想通过两层循环即可实现获取所有文章,具体代码如下:
#coding:utf-8
import urllib
import time
page=1
while page<=7:url=['']*50 #新浪播客每页显示50篇temp='http://blog.sina.com.cn/s/articlelist_1191258123_0_'+str(page)+'.html'con =urllib.urlopen(temp).read()#初始化i=0title=con.find(r'<a title=')href=con.find(r'href=',title)html = con.find(r'.html',href)#循环显示文章while title!=-1 and href!=-1 and html!=-1 and i<50:url[i]=con[href+6:html+5]print url[i] #显示文章URL#下面的从第一篇结束位置开始查找title=con.find(r'<a title=',html)href=con.find(r'href=',title)html = con.find(r'.html',href)i=i+1else:print 'end page=',page#下载获取文章j=0while(j<i): #前面6页为50篇 最后一页为i篇content=urllib.urlopen(url[j]).read()open(r'hanhan/'+url[j][-26:],'w+').write(content) #写方式打开 +表示没有即创建j=j+1time.sleep(1)else:print 'download'page=page+1
else:print 'all find end'
这样我们就把韩寒的316篇新浪博客文章全部爬取成功并能显示每一篇文章,显示如下:
这篇文章主要是简单的介绍了如何使用Python实现爬取网络数据,后面我还将学习一些智能的数据挖掘知识和Python的运用,实现更高效的爬取及获取客户意图和兴趣方面的知识.想实现智能的爬取图片和小说两个软件.
该文章仅提供思想,希望大家尊重别人的原创成果,不要随意爬取别人的文章并没有含原创作者信息的转载!最后希望文章对大家有所帮助,初学Python,如果有错误或不足之处,请海涵!
(By:Eastmount 2014-10-4 中午11点 原创CSDN http://blog.csdn.net/eastmount/)
参考资料:
1.51CTO学院 智普教育的python视频http://edu.51cto.com/course/course_id-581.html
2.《Web数据挖掘》刘兵著
[Python爬虫] 简单网络爬虫抓取博客文章及思想介绍相关推荐
- python爬虫入门实战!爬取博客文章标题和链接!
最近有小伙伴和我留言想学python爬虫,那么就搞起来吧. 准备阶段 爬虫有什么用呢?举个最简单的小例子,你需要<战狼2>的所有豆瓣影评.最先想的做法可能是打开浏览器,进入该网站,找到评论 ...
- scrapy爬取博客文章
锦瑟无端五十弦,一弦一柱思华年.庄生晓梦迷蝴蝶,望帝春心托杜鹃. 沧海月明珠有泪,蓝田日暖玉生烟.此情可待成追忆,只是当时已惘然. --李商隐<锦瑟> 编译环境:linux 编译器:ipy ...
- [Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 用python爬虫下载视频_使用Python编写简单网络爬虫抓取视频下载资源
我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎,所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...
- c#使用正则表达式获取TR中的多个TD_[Python从零到壹] 四.网络爬虫之入门基础及正则表达式抓取博客案例...
首先祝大家中秋节和国庆节快乐,欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都 ...
- .net core 实现简单爬虫—抓取博客园的博文列表
一.介绍一个Http请求框架HttpCode.Core HttpCode.Core 源自于HttpCode(传送门),不同的是 HttpCode.Core是基于.net standard 2.0实现的 ...
- python爬虫简单实例-Python 利用Python编写简单网络爬虫实例3
利用Python编写简单网络爬虫实例3 by:授客 QQ:1033553122 实验环境 python版本:3.3.5(2.7下报错 实验目的 获取目标网站"http://bbs.51tes ...
- 用python,selenium抓取博客积分
世界上最稀缺的资源是时间. 在某一瞬间我惊恐得发现,一生三万天,已过三分之一,念及年少不更事,蹉跎而过,觉得心中有愧.至今无建树,脑袋里想起一句话,"不因虚度年华而悔恨,也不因碌碌无为而羞耻 ...
- 使用scrapy抓取博客信息
使用scrapy抓取博客信息 本文使用python的爬虫工具scrapy获取博客园发布的文档的信息. 创建cnblog爬虫项目: scrapy startproject cnblog 创建爬虫cnbl ...
- .NET Core 实现定时抓取博客园首页文章信息并发送到邮箱
前言 大家好,我是晓晨.许久没有更新博客了,今天给大家带来一篇干货型文章,一个每隔5分钟抓取博客园首页文章信息并在第二天的上午9点发送到你的邮箱的小工具.比如我在2018年2月14日,9点来到公司我就 ...
最新文章
- 生成式对抗网络GAN有哪些最新的发展,可以实际应用到哪些场景中
- 机器学习在稀疏标注数据内部审计中的应用
- 2019年全球企业人工智能发展现状分析报告
- 关于对 linux系统的物理内存访问 /dev/mem
- MIT自然语言处理第三讲:概率语言模型(第一、二、三部分)
- 基本数据结构之BinarySearchTree
- nginx rtmp module 代码详解 各模块主要功能
- 算法试题 - 找出字符流中第一个不重复的元素
- php位运算重要吗,PHP位运算的用途
- oracle加大内存对大表,在ORACLE里如果遇到特别大的表,可以使用分区的表来改变其应用程序的性能...
- Java动态加载类(对反射的基本理解)
- 入行架构师之前,这7项技能你要先了解一下
- class? clazz参数_Java如何获取方法参数具体名称?这是个好问题
- 我花了一年时间研究不确定性估算,写下了这份最全指南
- 管理新语:根据工作难度,及时调整负责人员
- IDEA设置字体大小没反应解决
- 综述:生成自动驾驶的高精地图技术(3)
- Java按照word模板导出、下载文档
- 4 int、str类型(数据类型1)、type()
- 王学岗——————H265实现低延时投屏,从零实现高清无损投屏(对应第六节课)
热门文章
- Mybatis的代码
- 计算机开机配置失败6,win7开机配置windows update失败怎么跳过?-win7配置update失败,安全模式还是配置失败...
- 全球四大国际反垃圾邮件组织介绍
- maven:mirrors和repository的关系区别
- linux如何查找交换机网址,亚美am8网址-官网首页
- php jwt token刷新方案,laravel JWT自动刷新 自定义验证器
- springboot 删除路径下面所有文件_Spring boot内置Tomcat的临时目录被删除导致文件上传不了-问题解析...
- ThinkCMF 框架上的任意内容包含漏洞
- 亚马逊欧洲站的VAT需要多久申报一次
- lingo纳什均衡代码_传统的战略式博弈求解纳什均衡方法——虚拟博弈(Fictitious Play)讲解及其代码...