如何在Ubuntu 14.04 LTS中安装SCRACE A Web爬网工具

时间:2020-03-05 15:32:40  来源:igfitidea点击:

它是一个开源软件,用于从中提取数据。
Scrapy框架是在Python开发的,它以快速,简单和可扩展的方式执行爬行工作。
我们在虚拟框中创建了一个虚拟机(VM),并安装了Ubuntu 14.04 LTS。

安装Scrapy.

Scrapy依赖于Python,开发库和PIP软件。
Python最新版本在Ubuntu上预先安装。
因此,我们必须在安装SCAPAPE之前安装PIP和Python Developer库。

PIP是替代Python包索引器的Easy_install。
它用于Python软件包的安装和管理。

sudo apt-get install python-pip

我们必须使用以下命令安装Python开发库。
如果未安装此包,则Scrapy Framework的安装会生成关于Python.h标题文件的错误。

sudo apt-get install python-dev

SCRAPE框架可以从DEB包或者源代码安装。
但是,我们使用PIP(Python Package Manager)安装了Deb包,如图3所示。

sudo pip install scrapy

Scrapy成功安装需要一些时间。

数据提取使用Scrapy框架

(基本教程)

我们将使用SCRAPE从Fatwallet.com提取商店名称(提供卡)项目。
首先,我们使用下面给定的命令创建了新的Scrapy项目"Store_Name",并在图5中显示。

$sudo scrapy startproject store_name

上面的命令在当前路径上创建一个标题"Store_Name"的目录。
该项目的此主目录包含文件/文件夹,如下图6所示。

$sudo ls -lr store_name

下面给出每个文件/文件夹的简要说明;

  • scrapy.cfg是项目配置文件
  • store_name /是主目录中的另一个目录。此目录包含项目的Python代码。
  • Store_Name/Items.py包含这些项目将由蜘蛛提取。
  • store_name/pipelines.py是管道文件。
  • Store_name项目的设置位于Store_name/settings.py文件中。
  • 和stort_name/spiders /目录,包含爬行的蜘蛛

正如我们有兴趣从FatWallet.com中提取卡的商店名称,因此我们更新了文件的内容,如下所示。

import scrapy
class StoreNameItem(scrapy.Item):
   name = scrapy.Field()   # extract the names of Cards store

在此之后,我们必须在项目的Store_name/spiders /目录下编写新蜘蛛。
蜘蛛是Python类,由以下强制属性组成:

  • 蜘蛛的名称(名称)
  • 用于爬行的蜘蛛的启动URL(start_urls)
  • 和解析方法由Regex组成,用于从页面响应中提取所需项目。解析方法是蜘蛛的重要组成部分。

我们在Store_name/spiders /目录下创建了spider"store_name.py",并按照Python代码添加了从Fatwallet.com提取商店名称。
蜘蛛的输出写入文件(Storename.txt)。

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'&amp;',"&",re.sub(r'&amp;',"&",store_name,re.I))
#print store_name
output.write(store_name+""+"\n")