在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中的CURL PycURL使用例子
Jun 01 Python
python求crc32值的方法
Oct 05 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python基于jieba库进行简单分词及词云功能实现方法
Jun 16 Python
python中文编码与json中文输出问题详解
Aug 24 Python
python 实现敏感词过滤的方法
Jan 21 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
Python Pandas中根据列的值选取多行数据
Jul 08 Python
Django 实现图片上传和显示过程详解
Jul 18 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
高考考python编程是真的吗
Jul 20 Python
vscode+PyQt5安装详解步骤
Aug 12 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使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
使用vs code编辑调试php配置的方法
2019/01/29 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
Node.js和PHP根据ip获取地理位置的方法
2014/03/14 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
jQuery插件FusionCharts实现的3D柱状图效果实例【附demo源码下载】
2017/03/03 Javascript
AngularJS实现动态添加Option的方法
2017/05/17 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
Python3实现的简单验证码识别功能示例
2018/05/02 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
2018/11/01 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
基于python3生成标签云代码解析
2020/02/18 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
使用django自带的user做外键的方法
2020/11/30 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
Linux机考试题
2015/10/16 面试题
服装设计专业毕业生推荐信
2013/11/09 职场文书
大学四年学习的自我评价分享
2013/12/09 职场文书
亲属关系公证书
2014/04/08 职场文书
五水共治一句话承诺
2014/05/30 职场文书
计算机网络专业求职信
2014/06/05 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
python基础之文件操作
2021/10/24 Python
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
postgresql如何找到表中重复数据的行并删除
2023/05/08 MySQL