在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绘图方法实例入门
May 19 Python
python中实现k-means聚类算法详解
Nov 11 Python
Python实现连接postgresql数据库的方法分析
Dec 27 Python
python实现数据写入excel表格
Mar 25 Python
Python实现的微信好友数据分析功能示例
Jun 21 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
Python基本类型的连接组合和互相转换方式(13种)
Dec 16 Python
python中如何打包用户自定义模块
Sep 23 Python
Python下载的11种姿势(小结)
Nov 18 Python
python opencv通过按键采集图片源码
May 20 Python
python字符串的一些常见实用操作
Apr 06 Python
python中 .npy文件的读写操作实例
Apr 14 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 mssql 数据库分页SQL语句
2008/12/16 PHP
php 日期时间处理函数小结
2009/12/18 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
利用PHP函数计算中英文字符串长度的方法
2014/11/11 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
jQuery基于json与cookie实现购物车的方法
2016/04/15 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
Javascript的console['']常用输入方法汇总
2018/04/26 Javascript
vue移动端实现红包雨效果
2020/06/23 Javascript
JavaScript之解构赋值的理解
2019/01/30 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
[02:17]DOTA2亚洲邀请赛 RAVE战队出场宣传片
2015/02/07 DOTA
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
基于python的Paxos算法实现
2019/07/03 Python
Python字符串中添加、插入特定字符的方法
2019/09/10 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
中专毕业生的自我鉴定
2013/12/01 职场文书
迟到检讨书500字
2014/02/05 职场文书
小学家长学校培训材料
2014/08/24 职场文书
百年校庆感言
2015/08/01 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python