网络爬虫-Python和数据分析

kuayue66

贡献于2015-05-06

字数:0 关键词: 网络爬虫 Python

网络爬虫, Python和数据 分析 王澎 中国科技大学 什么是网络爬虫? • 网络爬虫是一个自动提取网页的程序,它为搜索 引擎从万维网上下载网页,是搜索引擎的重要组 成。传统爬虫从一个或若干初始网页的URL开始, 获得初始网页上的URL,在抓取网页的过程中, 不断从当前页面上抽取新的URL放入队列,直到满 足系统的一定停止条件 爬虫有什么用? • 做为通用搜索引擎网页收集器。(google,baidu) • 做垂直搜索引擎.(找工作的搜索引擎: www.deepdo.com,数据来源于:www.51job.com , www.zhaoping.com , www.chinahr.com 等等) • 科学研究:在线人类行为,在线社群演化,人类 动力学研究,计量社会学,复杂网络,数据挖掘, 等领域的实证研究都需要大量数据,网络爬虫是 收集相关数据的利器。 • 偷窥,hacking,发垃圾邮件……(《google hack》….) 爬虫是搜索引擎的第一步 也是最容易的一步 • 网页搜集 • 建立索引 • 查询排序 用什么语言写爬虫? •C,C++。高效率,快速,适合通用搜索引 擎做全网爬取。缺点,开发慢,写起来又 臭又长,例如:天网搜索源代码。 • 脚本语言:Perl, Python, Java, Ruby。简单, 易学,良好的文本处理能方便网页内容的 细致提取,但效率往往不高,适合对少量 网站的聚焦爬取 •C#?(貌似信息管理的人比较喜欢的语言) 我曾经用来写过爬虫的语言 • Perl: 古老的脚本语言,hack 语言,被用来写爬虫 有着悠久的历史,因此,书本支持相当丰富: 《spidering hacks》,《Perl & LWP》;强大的文 本处理能力,数据库支持能力。缺点:有点怪异。 • Python:相对年轻一点的语言。对于爬虫来说各 方面能力还行,并且还在完善中,没有Perl那样有 专门的爬虫书籍,不过网上能搜到一些文章。 为什么最终选择Python? • 跨平台,对Linux和windows都有不错的支持。 • 科学计算,数值拟合:Numpy,Scipy • 可视化:2d:Matplotlib(做图很漂亮), 3d: Mayavi2 • 复杂网络:Networkx • 统计:与R语言接口:Rpy • 交互式终端 • 网站的快速开发? 从一个简单的Python爬虫开始 说明:加说明语句时要注意#需要英文编码里的,而不能是中文输入法中的#号,所 以添加中文说明时先在英文输入法下打入#号后再切换到中文输入 ……… 瀚海星云Pie 版的网页部分代码 Pie版的Html树部分结构 利用BeautifulSoup剖析树 FindAll()是最方便最好用的函数 • 页面中的link 通用搜索策略 • 深度优先 • 广度优先 现实中的策略是多种多样的 • 因为瀚海星云link有很简单的规律,每页递减20,所以利用这个规 律设置每次赋入的URL,这样爬完了PIE版所有帖子 运行结果 • 有乱 码!! 爬取中文网页常有的问题:不规 格的编码模式 • 解决方法:编码转换 最后的结果 • Perfect! 请温柔的对待瀚海星云!! • 设置延迟时间(对于一个论坛,如果假设一 个真实的浏览者每10秒翻开一个新的网页的 话,一个不延时的爬虫每秒可以抓10个网页, 这样一个爬虫相当于占用了100个人的带 宽!) • 在午夜爬取可以适当加快速度 道上的规矩: 用Mysql存储数据 • 先要在自己数据库里建立一个空的表,这里, 这里我已经建立了一个名为lilybbs的数据库, 表名为hunan_a • 导入相应的模块 • 与相应的数据库连接 • 写入 数据库里的结果 统计和做图 • 这部分主要用于科研方 面,利用爬取到的数据 做一些简单的统计工作 • 右图是某论坛的回复网 络,使用python的 networkx包做的。 • Pylab 是 matplotlib作 图包的一部 分 • 左图是某 blog四年间 每天发表文 章的数量 • 左一是某blog网站每个blog 评论数的统计,x是blog评 论数量,y是有这样数量的 blog的数量。可以看到是标 准的“power-law”分布,幂 指数为-1.2左右,拟合使用 了Scipy包的optimize.leastsq, 函数,具体可见scipy cookbook页面的fitting data 一栏 • 左二是blog的comment networks 的入度与出度的散 点图,也就是每个点的坐 标x,y分别代表某个人获 得的评论和发出的评论数。 颜色代表这样点的数量。 本图使用了matplotlib中的 hexbin函数 高级主题(一):编写更健壮的爬虫 • 伪装成浏 览器 • 容错 高级主题(二):由内嵌脚本产生 的动态网页的爬取 • 如何爬取 像左图这 样的网页 呢? • 它显示的 内容并不 会呈现在 html文件 里。 高级主题(三):SQLAlchemy • 当你越关注性能,就会发现 SQL 数据库离对象集合越来越远;当你越关 注抽象,就会发现对象集合离表和行这些概念越来越远。SQLAlchemy 将 致力于尽量包容这两个世界。 • SQLAlchemy 并不把数据库简单地视为数据表的集合;它把它们看作是关 系代数引擎。它的关系对象映射能够让类以不同的方式映射到数据库。 SQL 工具包也不光能够对数据表进行 select 操作——你还能对连接、子查 询和联合进行 select。这样数据库关系和领域对象模型之间的耦合从一开 始就得以很好地解开,使得两个领域都得以发挥其各自的极致。 Mysql这样关系型数据库的缺点:在表 示复杂网络这样一对多,和多对多 的关系时,非常冗余;一旦需要做 比较复杂的统计,sql语句会变得异 常复杂。 • 我写过的某个繁琐的调用 • 号称能更简洁明了的SQLAlchemy会成为 mysql的替代品么? 高级主题(四):统计利器R语言 • 求方差,聚类,判 别,拟合,团簇探 测,时间序列分析, 生存分析,甚至复 杂网络,这些R语言 里都有很好的函数 • 可以直接使用R语言, 也可以利用Rpy在 python里面调用R的 函数,不过Rpy仍然 开发中,还不是很 成熟 曾经我们获取数据的手段: 我们用望远镜来洞察宇宙 昂贵的实验 只是为了获取大自然的数据 Internet 带给我们了海量的数据 善用数据,了解我们自己 浩瀚的比特海是另一片未知的星空 谢谢大家!

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档