在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引用模块和查找模块路径
Mar 17 Python
python条件变量之生产者与消费者操作实例分析
Mar 22 Python
Python内置模块hashlib、hmac与uuid用法分析
Feb 12 Python
使用python的pandas库读取csv文件保存至mysql数据库
Aug 20 Python
python实现狄克斯特拉算法
Jan 17 Python
Python:Numpy 求平均向量的实例
Jun 29 Python
Python求离散序列导数的示例
Jul 10 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python基于gevent实现并发下载器代码实例
Nov 01 Python
Python 项目转化为so文件实例
Dec 23 Python
Python实现SMTP邮件发送
Jun 16 Python
Python实现生成bmp图像的方法
Jun 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迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
PHP逐行输出(ob_flush与flush的组合)
2012/02/04 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
2021/03/09 PHP
拖动一个HTML元素
2006/12/22 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
JQuery Tips相关(1)----关于$.Ready()
2014/08/14 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
Position属性之relative用法
2015/12/14 Javascript
JavaScript 监控微信浏览器且自带返回按钮时间
2016/11/27 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python Django 实现简单注册功能过程详解
2019/07/29 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
python实现低通滤波器代码
2020/02/26 Python
python的列表List求均值和中位数实例
2020/03/03 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
本科毕业论文致谢词
2015/05/14 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python