如何在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")

