如何在Ubuntu 14.04 LTS中安装SCRACE A Web爬网工具
它是一个开源软件,用于从中提取数据。
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'&',"&",re.sub(r'&',"&",store_name,re.I)) #print store_name output.write(store_name+""+"\n")