在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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
在Python的web框架中中编写日志列表的教程
Apr 30 Python
剖析Python的Twisted框架的核心特性
May 25 Python
python使用标准库根据进程名如何获取进程的pid详解
Oct 31 Python
Java及python正则表达式详解
Dec 27 Python
python制作图片缩略图
Apr 30 Python
Python高级特性之闭包与装饰器实例详解
Nov 19 Python
Django之全局使用request.user.username的实例详解
May 14 Python
通过代码实例了解Python异常本质
Sep 16 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 Python
Python 阶乘详解
Oct 05 Python
python通过新建环境安装tfx的问题
May 20 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写的小东西
2006/12/06 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
如何使用php脚本给html中引用的js和css路径打上版本号
2015/11/18 PHP
PHP编写简单的App接口
2016/08/28 PHP
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
2014/04/14 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
jquery中each遍历对象和数组示例
2014/08/05 Javascript
JavaScript中检查对象property的存在性方法介绍
2014/12/30 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
AngularJS ng-repeat数组有重复值的解决方法
2016/10/23 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
js鼠标经过tab选项卡时实现切换延迟
2017/03/24 Javascript
利用yarn代替npm管理前端项目模块依赖的方法详解
2017/09/04 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
JavaScript实现消消乐的源代码
2021/01/12 Javascript
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python写的英文字符大小写转换代码示例
2015/03/06 Python
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
Python虚拟环境项目实例
2017/11/20 Python
python的Tqdm模块的使用
2018/01/10 Python
python如何将两个txt文件内容合并
2019/10/18 Python
通过实例了解python property属性
2019/11/01 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
常用的HTML5列表标签
2017/06/20 HTML / CSS
中式餐厅创业计划书范文
2014/01/23 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
消防安全主题班会
2015/08/12 职场文书
2019同学聚会主持词
2019/05/06 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书
浅谈python中的多态
2021/06/15 Python