python爬虫框架

来源:互联网 发布:淘宝十大平面女模特 编辑:程序博客网 时间:2024/06/05 05:56

转自:http://blog.csdn.net/pipisorry/article/details/21840247

Introduction to crawler爬虫简介

一个真实的项目,一定是从获取数据开始的。无论文本处理,机器学习和数据挖掘,都需要数据,除了通过一些渠道购买或者下载的专业数据外,常常需要大家自己动手爬数据。Python提供了一批很不错的网页爬虫工具框架,既能爬取数据,也能获取和清洗数据。

什么是爬虫

网络爬虫(Web Crawler, Spider)是一段程序,在爬行的时候会搜集一些信息。爬虫从基本原理上来讲很简单,只要能访问网络和分析 Web页面即可,现在大部分语言都有方便的 Http 客户端库可以抓取 Web页面,而 HTML 的分析最简单的可以直接用正则表达式来做,因此要做一个最简陋的网络爬虫实际上是一件很简单的事情。不过要实现一个高质量的 spider却是非常难的。[网络爬虫概述]

浏览网页的过程

在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以及百度搜索框,这个过程其实就是用户输入网址之后,经过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器经过解析之后,发送给用户的浏览器 HTML、JS、CSS 等文件,浏览器解析出来,用户便可以看到形形色色的图片了。

因此,用户看到的网页实质是由 HTML 代码构成的,爬虫爬来的便是这些内容,通过分析和过滤这些 HTML 代码,实现对图片、文字等资源的获取。

URL的含义

URL,即统一资源定位符,也就是我们说的网址,统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

URL的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机IP地址(有时也包括端口号)。
③第三部分是主机资源的具体地址,如目录和文件名等。

爬虫爬取数据时必须要有一个目标的URL才可以获取数据,因此,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。

爬虫的两部分

一是,下载 Web页面,有许多问题需要考虑,如何最大程度地利用本地带宽,如何调度针对不同站点的 Web请求以减轻对方服务器的负担等。一个高性能的 Web Crawler系统里,DNS查询也会成为急需优化的瓶颈,另外,还有一些“行规”需要遵循(例如robots.txt)。

二是,获取了网页之后的分析过程也是非常复杂的,Internet 上的东西千奇百怪,各种错误百出的 HTML页面都有,要想全部分析清楚几乎是不可能的事;另外,随着 AJAX 的流行,如何获取由 JavaScript动态生成的内容成了一大难题;除此之外,Internet上还有有各种有意或无意出现的Spider Trap,如果盲目的跟踪超链接的话,就会陷入 Trap 中万劫不复了,例如这个网站,据说是之前 Google 宣称 Internet 上的 Unique URL 数目已经达到了 1 trillion 个,因此这个人is proud to announce the second trillion 。

不过,其实并没有多少人需要做像 Google 那样通用的 Crawler ,通常我们做一个 Crawler 就是为了去爬特定的某个或者某一类网站,所谓知己知彼,百战不殆,我们可以事先对需要爬的网站结构做一些分析,事情就变得容易多了。通过分析,选出有价值的链接进行跟踪,就可以避免很多不必要的链接或者 Spider Trap,如果网站的结构允许选择一个合适的路径的话,我们可以按照一定顺序把感兴趣的东西爬一遍,这样以来,连 URL 重复的判断也可以省去。

举个例子,假如我们想把 pongba 的 blog mindhacks.cn 里面的 blog 文字爬下来,通过观察,很容易发现我们对其中的两种页面感兴趣:

  1. 文章列表页面,例如首页,或者 URL 是 /page/\d+/ 这样的页面,通过 Firebug 可以看到到每篇文章的链接都是在一个 h1 下的 a 标签里的(需要注意的是,在 Firebug 的 HTML 面板里看到的 HTML 代码和 View Source 所看到的也许会有些出入,如果网页中有 Javascript 动态修改 DOM 树的话,前者是被修改过的版本,并且经过 Firebug 规则化的,例如 attribute 都有引号扩起来等,而后者通常才是你的 spider 爬到的原始内容。如果是使用正则表达式对页面进行分析或者所用的 HTML Parser 和 Firefox 的有些出入的话,需要特别注意),另外,在一个 class 为 wp-pagenavi 的 div 里有到不同列表页面的链接。
  2. 文章内容页面,每篇 blog 有这样一个页面,例如 /2008/09/11/machine-learning-and-ai-resources/ ,包含了完整的文章内容,这是我们感兴趣的内容。

因此,我们从首页开始,通过 wp-pagenavi 里的链接来得到其他的文章列表页面,特别地,我们定义一个路径:只 follow Next Page 的链接,这样就可以从头到尾按顺序走一遍,免去了需要判断重复抓取的烦恼。另外,文章列表页面的那些到具体文章的链接所对应的页面就是我们真正要保存的数据页面了。这样以来,其实用脚本语言写一个 ad hoc 的 Crawler 来完成这个任务也并不难。

爬虫流程

把网站装进爬虫的四步:

  • 新建项目 (Project):新建一个新的爬虫项目
  • 明确目标(Items):明确你想要抓取的目标
  • 制作爬虫(Spider):制作爬虫开始爬取网页
  • 存储内容(Pipeline):设计管道存储爬取内容

皮皮Blog



要掌握的知识

要学习Python爬虫,我们要学习的共有以下几点:

Python基础知识

[python入门教程、基本类型的操作及相互转换]

Python中urllib和urllib2库的用法

urllib和urllib2库是学习Python爬虫最基本的库,利用这个库我们可以得到网页的内容,并对内容用正则表达式提取分析,得到我们想要的结果。

Python正则表达式

Python正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。

[python正则表达式]

Python爬虫框架Scrapy

如果你是一个Python高手,基本的爬虫知识都已经掌握了,那么就寻觅一下Python框架吧,我选择的框架是Scrapy框架。

[python爬虫 - scrapy]

Python爬虫更高级的功能

http://blog.csdn.net/pipisorry/article/details/47904355


Python网页爬虫工具集

1. Scrapy

Scrapy, a fast high-level screen scraping and web crawling framework for Python.

鼎鼎大名的Scrapy,课程图谱中的很多课程都是依靠Scrapy抓去的。

官方主页:http://scrapy.org/   Github代码页: https://github.com/scrapy/scrapy

[大牛pluskid早年的《Scrapy 轻松定制网络爬虫》]

[python爬虫 - scrapy]

2. Beautiful Soup

You didn’t write that awful page. You’re just trying to get some data out of it. Beautiful Soup is here to help. Since 2004, it’s been saving programmers hours or days of work on quick-turnaround screen scraping projects.

《集体智慧编程》有讲Beautiful Soup。客观的说,Beautifu Soup不完全是一套爬虫工具,需要配合urllib使用,而是一套HTML/XML数据分析,清洗和获取工具。

官方主页:http://www.crummy.com/software/BeautifulSoup/

3. Python-Goose

Html Content / Article Extractor, web scrapping lib in Python

Goose最早是用Java写得,后来用Scala重写,是一个Scala项目。Python-Goose用Python重写,依赖了Beautiful Soup。给定一个文章的URL, 获取文章的标题和内容很方便。

Github主页:https://github.com/grangier/python-goose


爬虫环境配置

前提是安装了python、Git、virtualenv

虚拟环境配置

/e/mine/python_workspace$ virtualenv CrawlerEnv

cd CrawlerEnv

source Scripts/activate

[python virtualenv虚拟环境配置]

添加到git管理中

登陆GitHub > 右上角“Create a newrepo” > 创建新的仓库 > 填写仓库名 如在Repositoryname填入Crawler,其他保持默认设置,点击“Create repository”按钮,就成功地创建了一个新的Git仓库.

运行命令:

(CrawlerEnv)

/e/mine/python_workspace/CrawlerEnv$ git remote add crawler git@github.com:....git

[Git版本控制教程 - Git远程仓库]

虚拟环境中安装相关python库

from:http://blog.csdn.net/pipisorry/article/details/21840247


http://blog.csdn.net/pipisorry/article/details/21840247
from:http://blog.csdn.net/pipisorry/article/details/21840247
0 0
原创粉丝点击