在Linux系统上安装Python的Scrapy框架的教程


Posted in Python onJune 11, 2015

这是一款提取网站数据的开源工具。Scrapy框架用Python开发而成,它使抓取工作又快又简单,且可扩展。我们已经在virtual box中创建一台虚拟机(VM)并且在上面安装了Ubuntu 14.04 LTS。
安装 Scrapy
Scrapy依赖于Python、开发库和pip。Python最新的版本已经在Ubuntu上预装了。因此我们在安装Scrapy之前只需安装pip和python开发库就可以了。

pip是作为python包索引器easy_install的替代品,用于安装和管理Python包。pip包的安装可见图 1。

sudo apt-get install python-pip

在Linux系统上安装Python的Scrapy框架的教程

图:1 pip安装

我们必须要用下面的命令安装python开发库。如果包没有安装那么就会在安装scrapy框架的时候报关于python.h头文件的错误。

sudo apt-get install python-dev

在Linux系统上安装Python的Scrapy框架的教程

    图:2 Python 开发库

scrapy框架既可从deb包安装也可以从源码安装。在图3中我们用pip(Python 包管理器)安装了deb包了。

sudo pip install scrapy

在Linux系统上安装Python的Scrapy框架的教程

    图:3 Scrapy 安装

图4中scrapy的成功安装需要一些时间。

在Linux系统上安装Python的Scrapy框架的教程

图:4 成功安装Scrapy框架
使用scrapy框架提取数据
基础教程

我们将用scrapy从fatwallet.com上提取商店名称(卖卡的店)。首先,我们使用下面的命令新建一个scrapy项目“store name”, 见图5。   

$sudo scrapy startproject store_name

    在Linux系统上安装Python的Scrapy框架的教程

    图:5 Scrapy框架新建项目

上面的命令在当前路径创建了一个“store_name”的目录。项目主目录下包含的文件/文件夹见图6。

  

$sudo ls ?lR store_name

   在Linux系统上安装Python的Scrapy框架的教程

    图:6 store_name项目的内容

每个文件/文件夹的概要如下:

  •     scrapy.cfg 是项目配置文件
  •     store_name/ 主目录下的另一个文件夹。 这个目录包含了项目的python代码
  •     store_name/items.py 包含了将由蜘蛛爬取的项目
  •     store_name/pipelines.py 是管道文件
  •     store_name/settings.py 是项目的配置文件
  •     store_name/spiders/, 包含了用于爬取的蜘蛛

由于我们要从fatwallet.com上如提取店名,因此我们如下修改文件(LCTT 译注:这里没说明是哪个文件,译者认为应该是 items.py)。

import scrapy
  class StoreNameItem(scrapy.Item):
    name = scrapy.Field()  # 取出卡片商店的名称

之后我们要在项目的store_name/spiders/文件夹下写一个新的蜘蛛。蜘蛛是一个python类,它包含了下面几个必须的属性:

  •     蜘蛛名 (name )
  •     爬取起点url (start_urls)
  •     包含了从响应中提取需要内容相应的正则表达式的解析方法。解析方法对爬虫而言很重要。

我们在storename/spiders/目录下创建了“storename.py”爬虫,并添加如下的代码来从fatwallet.com上提取店名。爬虫的输出写到文件(StoreName.txt)中,见图7。

from scrapy.selector import Selector
  from scrapy.spider import BaseSpider
  from scrapy.http import Request
  from scrapy.http import FormRequest
  import re
  class StoreNameItem(BaseSpider):
  name = "storename"
  allowed_domains = ["fatwallet.com"]
  start_urls = ["http://fatwallet.com/cash-back-shopping/"]
  def parse(self,response):
  output = open('StoreName.txt','w')
  resp = Selector(response)
  tags = resp.xpath('//tr[@class="storeListRow"]|\
       //tr[@class="storeListRow even"]|\
       //tr[@class="storeListRow even last"]|\
       //tr[@class="storeListRow last"]').extract()
  for i in tags:
  i = i.encode('utf-8', 'ignore').strip()
  store_name = ''
  if re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S):
  store_name = re.search(r"class=\"storeListStoreName\">.*?<",i,re.I|re.S).group()
  store_name = re.search(r">.*?<",store_name,re.I|re.S).group()
  store_name = re.sub(r'>',"",re.sub(r'<',"",store_name,re.I))
  store_name = re.sub(r'&',"&",re.sub(r'&',"&",store_name,re.I))
  #print store_name
  output.write(store_name+""+"\n")
  

在Linux系统上安装Python的Scrapy框架的教程

Python 相关文章推荐
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
Python  pip安装lxml出错的问题解决办法
Feb 10 Python
Python可变参数用法实例分析
Apr 02 Python
Python正则表达式知识汇总
Sep 22 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python3使用matplotlib绘制散点图
Mar 19 Python
Python中的list与tuple集合区别解析
Oct 12 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
python xlwt模块的使用解析
Apr 13 Python
Python语言实现机器学习的K-近邻算法
Jun 11 #Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 #Python
python中的代码编码格式转换问题
Jun 10 #Python
python实现数独算法实例
Jun 09 #Python
python中的全局变量用法分析
Jun 09 #Python
python简单实现计算过期时间的方法
Jun 09 #Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 #Python
You might like
PHP基础知识介绍
2013/09/17 PHP
如何打开php的gd2库
2017/02/09 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
google 搜索框添加关键字实现代码
2010/04/24 Javascript
jquery网页回到顶部效果(图标渐隐,自写)
2014/06/16 Javascript
js实现点击左右按钮轮播图片效果实例
2015/01/29 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
纯javascript代码实现计算器功能(三种方法)
2015/09/07 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
Python字符串拼接的几种方法整理
2017/08/02 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
Python urllib3软件包的使用说明
2020/11/18 Python
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
经贸日语专业个人求职信范文
2013/12/28 职场文书
人力资源总监工作说明
2014/03/03 职场文书
租房安全协议书
2014/08/20 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书