在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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
python 内置函数filter
Jun 01 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
Python入门学习指南分享
Apr 11 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
python调用函数、类和文件操作简单实例总结
Nov 29 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
Python如何实现邮件功能
May 27 Python
Opencv求取连通区域重心实例
Jun 04 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
详解Pymongo常用查询方法总结
Jan 29 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
php array_unique之后json_encode需要注意
2011/01/02 PHP
PHP实现的简单日历类
2014/11/29 PHP
php计算年龄精准到年月日
2015/11/17 PHP
YII Framework框架教程之安全方案详解
2016/03/14 PHP
Yii2框架数据验证操作实例详解
2018/05/02 PHP
PHP实现微信对账单处理
2018/10/01 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
AngularJS iframe跨域打开内容时报错误的解决办法
2015/01/26 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
把多个JavaScript函数绑定到onload事件处理函数上的方法
2016/09/04 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
CentOS6.5设置Django开发环境
2016/10/13 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
Python Pexpect库的简单使用方法
2019/01/29 Python
Python实现打砖块小游戏代码实例
2019/05/18 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
html5 canvas 实现光线沿不规则路径运动
2020/04/20 HTML / CSS
经管应届生求职信
2013/11/17 职场文书
2014年导购员工作总结
2014/11/18 职场文书
学校工会工作总结2015
2015/05/19 职场文书
2016教师节问候语
2015/11/10 职场文书
解析Java异步之call future
2021/06/14 Java/Android
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
mysql数据插入覆盖和时间戳的问题及解决
2022/03/25 MySQL
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers