Scrary:一個開源友好的擴(kuò)展性強(qiáng)框架,主要作用從網(wǎng)站上抓取所需要的數(shù)據(jù)。優(yōu)點:快速,強(qiáng)大,擴(kuò)展性強(qiáng),無需接觸核心代碼即可使用,python編寫可移植型強(qiáng)。
包的安裝:
http://www.cnblogs.com/python-life/articles/4511314.html
一個簡單地scrapy spider編寫過程
- 創(chuàng)建工程
創(chuàng)建工程的命令scrapy startproject project_name
在genspider的基礎(chǔ)上改寫想要的內(nèi)容cd project_name
創(chuàng)建spiderscrapy genspider dmoz_spider(spider_name) dmoz.org(目標(biāo)網(wǎng)站) - 定義要摘取的內(nèi)容
在items.py中定義要爬取的內(nèi)容
title=scrapy.Field() - 編寫spider
修改文件夾中的spider下的dmoz_spider.py文件 - 修改pipeline
修改pipeline.py - 運(yùn)行
運(yùn)行,命令行輸入:scrapy crawl dmoz_spider(spider_name)
列出一個工程中的爬蟲:scrapy list
scrapy命令行工具
scrapy --help用于查看幫助信息
scrapy version (-v)用于顯示scrapy版本信息,加上-v顯示各組件的版本
startproject:scrapy startproject project_name創(chuàng)建一個工程和其相對完整的目錄結(jié)構(gòu)
genspider:scrapy genspider dmoz_spider(spider_name) dmoz.org(目標(biāo)網(wǎng)站)在一個工程中(cd之后)運(yùn)行產(chǎn)生一個spider,可以產(chǎn)生多個spider,要求spider名稱不同
scrapy list:用來查看本工程中的spider名稱
scrapy view +url:查看頁面源碼在瀏覽器中顯示的樣子
scrapy parse:在工程中以固定的parse函數(shù)(工程中的函數(shù))解析某個頁面,可以進(jìn)一步判斷parse函數(shù)是否有誤
scrapy shell:用于調(diào)試數(shù)據(jù),檢測xpath,查看頁面源碼等,執(zhí)行命令進(jìn)入交互式頁面,可以產(chǎn)生一些供使用的全局變量
scrapy runspider spider_name.py:運(yùn)行一個自包含的爬蟲
scrapy bench:基準(zhǔn)測試,用來測試scrapy安裝是否成功
scrapy的重要組件
spider:定義如何爬取一個網(wǎng)站,包括怎樣跟蹤連接,怎樣提取數(shù)據(jù),基本流程:
- 產(chǎn)生初始requests
- parse函數(shù)解析requests對應(yīng)的response
- 使用selector抽取需要的信息
- 存儲item
selector:解析網(wǎng)頁的庫還有beautifulsoup,lxml。但是scrapy中默認(rèn)的是selector。常用的抽取方法:
- xpath
response.xpath('//title/text()') - css
response.css(title::text) - re
- extract
item :定義要抓取的屬性
import scrapy
class Product(scrapy.Item):
name=scrapy.Field()
price=scrapy.Field()
pipeline:清洗html數(shù)據(jù),檢驗數(shù)據(jù),存儲數(shù)據(jù)
from scrapy.exceptions import DropItem
class PricePipeline(object):
vat_factor=1.15
def process_item(self,item,spider):
if item['price']:
...
else:
...
要想使得pipeline生效,必須要做的事在setting.py中加入以下內(nèi)容:
ITEM_PIPELINES={
'myproject.pipeline.PricePipeline':300,
'myproject.pipeline.pricePipeline':800,
#'路徑':優(yōu)先級,先執(zhí)行優(yōu)先級低的再執(zhí)行優(yōu)先級搞得
}
Feed Export:存儲抓取到的數(shù)據(jù)
存儲格式包括:
- JSON
- JSON lines
- CSV
- XML
存儲位置包括:本地,S3,F(xiàn)TP,標(biāo)準(zhǔn)輸出