在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实现方法
Nov 18 Python
Opencv+Python 色彩通道拆分及合并的示例
Dec 08 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
Feb 21 Python
python tkinter canvas 显示图片的示例
Jun 13 Python
Python整数与Numpy数据溢出问题解决
Sep 11 Python
Python使用matplotlib绘制Logistic曲线操作示例
Nov 28 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
什么是Python变量作用域
Jun 03 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
pip/anaconda修改镜像源,加快python模块安装速度的操作
Mar 04 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使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
Yii使用DbTarget实现日志功能的示例代码
2020/07/21 PHP
JS 文字符串转换unicode编码函数
2009/05/30 Javascript
prototype 中文参数乱码解决方案
2009/11/09 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
js浮点数精确计算(加、减、乘、除)
2013/12/26 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
jquery中filter方法用法实例分析
2015/02/06 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
学习Angular中作用域需要注意的坑
2016/08/17 Javascript
vue中使用element-ui进行表单验证的实例代码
2018/06/22 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
一份python入门应该看的学习资料
2018/04/11 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
使用Python webdriver图书馆抢座自动预约的正确方法
2021/03/04 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
美国第二大连锁书店:Books-A-Million
2017/12/28 全球购物
Three Graces London官网:英国奢侈品牌
2021/03/18 全球购物
音乐系毕业生自荐信
2013/10/27 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
小学生运动会通讯稿
2014/09/23 职场文书
职工的安全责任书范文!
2019/07/02 职场文书
浅谈如何提高PHP代码质量之单元测试
2021/05/28 PHP
Pygame Rect区域位置的使用(图文)
2021/11/17 Python
python blinker 信号库
2022/05/04 Python