在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内置数据类型详解
Aug 18 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
python文本数据相似度的度量
Mar 12 Python
用pycharm开发django项目示例代码
Jun 13 Python
Django接收post前端返回的json格式数据代码实现
Jul 31 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python 变量初始化空列表的例子
Nov 28 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
python中return如何写
Jun 18 Python
使用Keras构造简单的CNN网络实例
Jun 29 Python
python实现从ftp上下载文件的实例方法
Jul 19 Python
python 实现简单的计算器(gui界面)
Nov 11 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 ajax 分页类代码
2008/11/13 PHP
php比较相似字符串的方法
2015/06/05 PHP
PHP页面跳转操作实例分析(header方法)
2016/09/28 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
2015/03/04 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
bootstrap输入框组代码分享
2016/06/07 Javascript
Nodejs之http的表单提交
2017/07/07 NodeJs
详解weex默认webpack.config.js改造
2018/01/08 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
vue限制输入框只能输入8位整数和2位小数的代码
2019/11/06 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
Python StringIO模块实现在内存缓冲区中读写数据
2015/04/08 Python
Python计算一个文件里字数的方法
2015/06/15 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
就业协议书怎么填
2014/04/11 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
小学生交通安全寄语
2015/02/27 职场文书
宿舍管理制度范本
2015/08/07 职场文书
暑假打工感想
2015/08/07 职场文书
表扬信范文
2019/04/22 职场文书
给原生html中添加水印遮罩层的实现示例
2021/04/02 Javascript
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python
python开发人人对战的五子棋小游戏
2022/05/02 Python