当前位置: 首页 > news >正文

广州小型网站建设公司陕西省信用建设官方网站

广州小型网站建设公司,陕西省信用建设官方网站,永久域名注册,电子产品网站建设策划书开源 Python 网络爬虫框架 Scrapy#xff1a;http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫#xff0c;就是一个在网上到处或定向抓取数据的程序#xff0c;当然#xff0c;这种说法不够专业#xff0c;更专业的描述就是#xff0c;抓取特定网…  开源 Python 网络爬虫框架 Scrapyhttp://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫就是一个在网上到处或定向抓取数据的程序当然这种说法不够专业更专业的描述就是抓取特定网站网页的HTML数据。不过由于一个网站的网页很多而我们又不可能事先知道所有网页的URL地址所以如何保证我们抓取到了网站的所有HTML页面就是一个有待考究的问题了。 一般的方法是定义一个入口页面然后一般一个页面会有其他页面的URL于是从当前页面获取到这些URL加入到爬虫的抓取队列中然后进入到新新页面后再递归的进行上述的操作其实说来就跟深度遍历或广度遍历一样。 上面介绍的只是爬虫的一些概念而非搜索引擎实际上搜索引擎的话其系统是相当复杂的爬虫只是搜索引擎的一个子系统而已。 下面介绍一个开源的爬虫框架 Scrapy。 一、概述 Scrapy是一个用 Python 写的 Crawler Framework 简单轻巧并且非常方便并且官网上说已经在实际生产中在使用了不过现在还没有 Release 版本可以直接使用他们的 Mercurial 仓库里抓取源码进行安装。 Scrapy 使用 Twisted 这个异步网络库来处理网络通讯架构清晰并且包含了各种中间件接口可以灵活的完成各种需求。整体架构如下图所示 绿线是数据流向首先从初始 URL 开始Scheduler 会将其交给 Downloader 进行下载下载之后会交给 Spider 进行分析Spider 分析出来的结果有两种一种是需要进一步抓取的链接例如之前分析的“下一页”的链接这些东西会被传回 Scheduler 另一种是需要保存的数据它们则被送到 Item Pipeline 那里那是对数据进行后期处理详细分析、过滤、存储等的地方。另外在数据流动的通道里还可以安装各种中间件进行必要的处理。 二、组件 scrapy 组件 1、Scrapy EngineScrapy引擎Scrapy引擎是用来控制整个系统的数据处理流程并进行事务处理的触发。更多的详细内容可以看下面的数据处理流程。2、Scheduler调度器调度程序从Scrapy引擎接受请求并排序列入队列并在Scrapy引擎发出请求后返还给他们。3、Downloader下载器下载器的主要职责是抓取网页并将网页内容返还给蜘蛛( Spiders)。4、Spiders蜘蛛蜘蛛是有Scrapy用户自己定义用来解析网页并抓取制定URL返回的内容的类每个蜘蛛都能处理一个域名或一组域名。换句话说就是用来定义特定网站的抓取和解析规则。Spiders ( 蜘蛛 ) 的整个抓取流程周期是这样的 首先获取第一个URL的初始请求当请求返回后调取一个回调函数。第一个请求是通过调用start_requests()方法。该方法默认从start_urls中的Url中生成请求并执行解析来调用回调函数。在回调函数中你可以解析网页响应并返回项目对象和请求对象或两者的迭代。这些请求也将包含一个回调然后被Scrapy下载然后有指定的回调处理。在回调函数中你解析网站的内容同程使用的是Xpath选择器但是你也可以使用BeautifuSoup, lxml或其他任何你喜欢的程序并生成解析的数据项。最后从蜘蛛返回的项目通常会进驻到项目管道。 5、Item Pipeline项目管道项目管道的主要责任是负责处理有蜘蛛从网页中抽取的项目他的主要任务是清晰、验证和存储数据。当页面被蜘蛛解析后将被发送到项目管道并经过几个特定的次序处理数据。每个项目管道的组件都是有一个简单的方法组成的Python类。他们获取了项目并执行他们的方法同时他们还需要确定的是是否需要在项目管道中继续执行下一步或是直接丢弃掉不处理。项目管道通常执行的过程有 清洗HTML数据验证解析到的数据检查项目是否包含必要的字段检查是否是重复数据如果重复就删除将解析到的数据存储到数据库中 6、Downloader middlewares下载器中间件: 下载中间件是位于Scrapy引擎和下载器之间的钩子框架主要是处理Scrapy引擎与下载器之间的请求及响应。它提供了一个自定义的代码的方式来拓展Scrapy的功能。下载中间器是一个处理请求和响应的钩子框架。他是轻量级的对Scrapy尽享全局控制的底层的系统。7、Spider middlewares蜘蛛中间件蜘蛛中间件是介于Scrapy引擎和蜘蛛之间的钩子框架主要工作是处理蜘蛛的响应输入和请求输出。它提供一个自定义代码的方式来拓展Scrapy的功能。蛛中间件是一个挂接到Scrapy的蜘蛛处理机制的框架你可以插入自定义的代码来处理发送给蜘蛛的请求和返回蜘蛛获取的响应内容和项目。8、Scheduler middlewares调度中间件调度中间件是介于Scrapy引擎和调度之间的中间件主要工作是处从Scrapy引擎发送到调度的请求和响应。他提供了一个自定义的代码来拓展Scrapy的功能。三、数据处理流程 Scrapy的整个数据处理流程有Scrapy引擎进行控制其主要的运行方式为 引擎打开一个域名然后蜘蛛处理这个域名。蜘蛛获取第一个爬取的URL。引擎从蜘蛛那获取第一个需要爬取的URL然后作为请求在调度中进行调度。引擎从调度那获取接下来进行爬取的页面。调度将下一个爬取的URL返回给引擎引擎将他们通过下载中间件发送到下载器。当网页被下载器下载完成以后响应内容通过下载中间件被发送到引擎。引擎收到下载器的响应并将它通过蜘蛛中间件发送到蜘蛛进行处理。蜘蛛处理响应并返回爬取到的项目然后给引擎发送新的请求。引擎将抓取到的项目项目管道并向调度发送请求。系统重复第二部后面的操作直到调度中没有请求然后断开引擎与域之间的联系。四、安装 Scrapy是一个快速,高层次的屏幕抓取和web抓取框架用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛可以用于数据挖掘、监测和自动化测试。Scrapy吸引人的地方在于它是一个框架任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类如BaseSpider、sitemap爬虫等最新版本又提供了web2.0爬虫的支持。 下面介绍Scrapy在windows下的安装: 首先下载windows版Scrapy-0.15.0.2842.win32.exe直接安装。 安装之后不能直接运行scrapy提供的test会提示错误因为scrapy基于其他一些python库需要把这些库都安装才行。 TwistedTwisted Matrix 是一种用来进行网络服务和应用程序编程的纯 Python 框架虽然 Twisted Matrix 中有大量松散耦合的模块化组件但该框架的中心概念还是非阻塞异步服务器这一思想。Twisted的安装也非常简单在这里直接下载windows平台下的相应版本即可http://pypi.python.org/packages/2.7/T/Twisted/ zope.interface在这里下载http://pypi.python.org/pypi/zope.interface/3.8.0#downloads。zope.interface没有提供windows平台下的exe版只提供了windows平台下的egg包。 ez_setup下载http://pypi.python.org/pypi/ez_setup安装。将egg文件放置在{python安装目录}\Scripts目录下。 打开CMD并切换至scripts目录easy_install zope.interface-3.8.0-py2.6-win32.egg安装。 w3libzope.interface问题解决之后还会提示缺少w3lib下载http://pypi.python.org/pypi/w3lib后安装即可 libxml2使用scrapy的html解析功能时会提示你缺少libxml2所以我们先把这个也装上地址http://xmlsoft.org/sources/win32/python/下载相应的版本即可。 至此就可以使用Scrapy玩spider了大家可以根据文档写一个简单的爬虫试试实际上使用scrapy做一个简易的爬虫甚至只需要几行代码就可以了以后有空再详细说说使用方法本文不做更多描述。 五、入门 本文参考Scrapy Tutorial里面的文档翻译出来加上自己的理解供大家学习。 在本文中我们将学会如何使用Scrapy建立一个爬虫程序并爬取指定网站上的内容这一切在Scrapy框架内实现将是很简单轻松的事情。 本教程主要内容包括一下四步 1. 创建一个新的Scrapy Project2. 定义你需要从网页中提取的元素Item3. 实现一个Spider类通过接口完成爬取URL和提取Item的功能4. 实现一个Item PipeLine类完成Item的存储功能新建工程 首先为我们的爬虫新建一个工程首先进入一个目录任意一个我们用来保存代码的目录执行 scrapy startproject Domz 最后的Domz就是项目名称。这个命令会在当前目录下创建一个新目录Domz结构如下 dmoz/ scrapy.cfg dmoz/ __init__.py items.py pipelines.py settings.py spiders/ __init__.py scrapy.cfg: 项目配置文件 items.py: 需要提取的数据结构定义文件 pipelines.py: 管道定义用来对items里面提取的数据做进一步处理如保存等 settings.py: 爬虫配置文件 spiders: 放置spider的目录 定义Item 在items.py里面定义我们要抓取的数据 from scrapy.item import Item, Field class DmozItem(Item): title Field() link Field() desc Field() 这里我们需要获取dmoz页面上的标题链接描述所以定义一个对应的items结构不像Django里面models的定义有那么多种类的Field这里只有一种就叫Field()再复杂就是Field可以接受一个default值。 实现Spider spider只是一个继承字scrapy.spider.BaseSpider的Python类有三个必需的定义的成员 name: 名字这个spider的标识start_urls: 一个url列表spider从这些网页开始抓取parse(): 一个方法当start_urls里面的网页抓取下来之后需要调用这个方法解析网页内容同时需要返回下一个需要抓取的网页或者返回items列表 所以在spiders目录下新建一个spiderdmoz_spider.py: class DmozSpider(BaseSpider): name dmoz.org start_urls [ http://www.dmoz.org/Computers/Programming/Languages/Python/Books/, http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/ ] def parse(self, response): filename response.url.split(/)[-2] open(filename, wb).write(response.body) 提取Item 提取数据到Items里面主要用到XPath提取网页数据 scrapy有提供两个XPath选择器HtmlXPathSelector和XmlXPathSelector一个用于HTML一个用于XMLXPath选择器有三个方法 select(xpath): 返回一个相对于当前选中节点的选择器列表一个XPath可能选到多个节点 extract(): 返回选择器列表对应的节点的字符串列表 re(regex): 返回正则表达式匹配的字符串分组匹配列表 一种很好的方法是在Shell里面对XPath进行测试 scrapy shell http://www.dmoz.org/Computers/Programming/Languages/Python/Books/ 现在修改parse()方法看看如何提取数据到items里面去 def parse(self, response): hxs HtmlXPathSelector(response) sites hxs.select(//ul/li) items [] for site in sites: item DmozItem() item[title] site.select(a/text()).extract() item[link] site.select(a/href).extract() item[desc] site.select(text()).extract() items.append(item) return items 实现PipeLine PipeLine用来对Spider返回的Item列表进行保存操作可以写入到文件、或者数据库等。 PipeLine只有一个需要实现的方法process_item例如我们将Item保存到一个文件中 def __init__(self): self.file open(jingdong.txt, wb) def process_item(self, item, spider): self.file.write(item[title] \t item[link] \t item[desc]\n) 到现在我们就完成了一个基本的爬虫的实现可以输入下面的命令来启动这个Spider: scrapy crawl dmoz.org Scrapy之URL解析与递归爬取 前面介绍了Scrapy如何实现一个最简单的爬虫但是这个Demo里只是对一个页面进行了抓取。在实际应用中爬虫一个重要功能是”发现新页面”然后递归的让爬取操作进行下去。 发现新页面的方法很简单我们首先定义一个爬虫的入口URL地址比如Scrapy入门教程中的start_urls爬虫首先将这个页面的内容抓取之后解析其内容将所有的链接地址提取出来。这个提取的过程是很简单的通过一个html解析库将这样的节点内容提取出来href参数的值就是一个新页面的URL。获取这个URL值之后将其加入到任务队列中爬虫不断的从队列中取URL即可。这样只需要为爬虫定义一个入口的URL那么爬虫就能够自动的爬取到指定网站的绝大多数页面。 当然在具体的实现中我们还需要对提取的URL做进一步处理: 1. 判断URL指向网站的域名如果指向的是外部网站那么可以将其丢弃2. URL去重可以将所有爬取过的URL存入数据库中然后查询新提取的URL在数据库中是否存在如果存在的话当然就无需再去爬取了。 下面介绍一下如何在Scrapy中完成上述这样的功能。 我们只需要改写spider的那个py文件即可修改parse()方法代码如下 from scrapy.selector import HtmlXPathSelector def parse(self, response): hxs HtmlXPathSelector(response) items [] newurls hxs.select(//a/href).extract() validurls [] for url in newurls: #判断URL是否合法 if true: validurls.append(url) items.extend([self.make_requests_from_url(url).replace(callbackself.parse) for url in validurls]) sites hxs.select(//ul/li) items [] for site in sites: item DmozItem() item[title] site.select(a/text()).extract() item[link] site.select(a/href).extract() item[desc] site.select(text()).extract() items.append(item) return items
http://www.pierceye.com/news/614940/

相关文章:

  • 村级网站建设 不断增强免费logo设计图案创意
  • 做网站优化有什么途径什么类型的公司需要做建设网站的
  • 计算机毕设代做网站深圳自适应网站开发
  • 万网主机建设网站流程idc 网站备案
  • 收费用的网站怎么做珠海网站关键词推广
  • 学技巧网站制作网站建设税率多少
  • 高端网站设计平台网页设计模板的网站
  • 万网云服务器网站上线网站开发开票税率
  • 西安高端网站制作公司网站开发需要哪些知识
  • 不错的网站建设公网站建设产品展示型的
  • 泰安住房和城乡建设局网站东莞网站推广哪家好信息
  • 个人网站制作的选题意义简短干净三字公司起名
  • 网站卡密代理怎么做网站建设有关表格
  • 易语言可以做网站么永久免费linux云主机
  • 什么网站可以免费做视频软件网站广告推广价格
  • 网站建设手机软件黄页88收费吗
  • 郑州网站建设多少钱wordpress分享获得积分
  • 贵阳网站设计模板建设工程监理招标网站
  • 上海专业的网页设计公司百度推广优化怎么做的
  • 河南城乡建设厅网站wordpress 主题 字体
  • 网站编辑的工作内容深圳网站设计公司有哪些
  • 设计深圳网站制作网站建设及维护招聘
  • 网站开发实训新的体会wordpress防止机器人注册
  • 购买的网站如何换背景自建网站如何被百度收录
  • 国外外贸网站手机销售网站制作
  • 海外永久网站众车网是哪家公司网站
  • 上海 网站开发 兼职布吉建设网站
  • 做网站资金来源是什么wordpress模版sns
  • 聊城wap网站建设如何分析网站竞争对手
  • 卓业网站建设flash 网站 收费