一. 命令行工具 ● 幫助命令 關(guān)于命令的幫助 scrapy <command> -h 所有可用的命令 scrapy -h ● 命令分類 全局命令:startproject, settings, runspider, shell, fetch, view, version 工程相關(guān)的命令: crawl, check, list, edit, parse, genspider, deploy,bench ● 具體命令說明 ○ startproject: scrapy startproject <project_name> 創(chuàng)建新的scrapy工程 ○ genspider: scrapy genspider [-t template] <name> <domain> 在當(dāng)前工程中創(chuàng)建新的爬蟲 ○ crawl: scrapy crawl <spider> 用爬蟲開始抓取 ○ check: scrapy check [-l] <spider> 對比檢測 ○ list: scrapy list 列出當(dāng)前工程中可用的爬蟲 ○ edit: scrapy edit 用EDITOR設(shè)置中的編輯器編輯爬蟲 ○ fetch: scrapy fetch <url> 用scrapy下載器下載指定url,將結(jié)果寫到標(biāo)準(zhǔn)輸出 ○ view: scrapy view <url> 以scrapy爬蟲可以讀取的方式打開url ○ shell: scrapy shell <url> 啟動scrapy shell ○ parse: scrapy parse <url> [options] 獲取并解析指定url的內(nèi)容,支持的options有: ◎ --spider=SPIDER 強(qiáng)制使用指定爬蟲解析 ◎ --a name=value 設(shè)置爬蟲參數(shù),可以重復(fù) ◎ --callback或-c 用spider函數(shù)作為回調(diào)來解析返回結(jié)果 ◎ --pipelines 通過pipelines處理抓取條目 ◎ --rules或-r 用爬蟲規(guī)則找對應(yīng)的回調(diào)來解析返回結(jié)果 ◎ --noitems 不顯示抓取條目 ◎ --nolinks 不顯示提取的鏈接 ◎ --depth或-d 請求循環(huán)深度 ◎ --verbose或-v 顯示每個(gè)深度的信息 ○ settings: scrapy settings [options] 獲取scrapy配置中的值 ○ runspider: scrapy runspider <spider_file.py> 不需要創(chuàng)建工程,運(yùn)行py文件中的爬蟲。 ○ version: scrapy version [-v] 打印scrapy版本,帶參數(shù)-v會輸出python、twisted和平臺的信息。 ○ deploy: scrapy deploy [ <target:project> | -l <target> | -L] 部署工程到scrapy服務(wù)器 ○ bench: scrapy bench 運(yùn)行基準(zhǔn)測試程序 ○ COMMANDS_MOUDLE 自定義命令 二. 條目 爬取的目的就是從非結(jié)構(gòu)的信息中獲得結(jié)構(gòu)化的數(shù)據(jù),Scrapy的Item就是實(shí)現(xiàn)該過程的。 ● 聲明 import scrapy class Product(scrapy.Item) name=scrapy.Field() …… ● 創(chuàng)建 >>>product= Product(name='PC') ● 獲取字段值 >>>product['name'] ● 設(shè)置字段值 >>>product['name']= 'App' ● 獲取所有值 >>>product.items() ● 繼承 class DiscountedProduct(product) discount_percent=scrapy.Field(serializer=str) ● Item對象 scrapy.item.Item([arg]) ● Field對象 scrapy.item.Field([arg]) 三. 爬蟲 爬蟲就是用戶定義的抓取和解析指定站點(diǎn)的地方,一般爬蟲的執(zhí)行流程如下: ① 生成初始請求抓取第一個(gè)url,當(dāng)獲得請求結(jié)果后調(diào)用指定的回調(diào)函數(shù)。 ② 在回調(diào)函數(shù)中,解析返回結(jié)果,獲取Item對象或請求對象。解析得到的請求對象又包含回調(diào)方法,Scrapy循環(huán)執(zhí)行上述過程。 ③ 在回調(diào)中,一般用Selectors(也可用BeautifulSoup或lxml等)解析到Items。 ④ 最后,爬蟲返回的結(jié)果將被持久化到數(shù)據(jù)庫(用Item Pipeline)或文件(用Feed exports)。 ● spider參數(shù) ○ scrapy crawl myspider -a category-electronics 命令行參數(shù) ○ 構(gòu)造函數(shù)中 import scrapy class myspider(scrapy.Spider) name='myspider' def __init__(self, catagory=None, *args, **kwargs) super(Myspider, self).__init__(*args, **kwargs) …… 下面介紹幾個(gè)scrapy自帶的spider: ● spider scrapy.sider.Spider是最簡單的Spider,其他爬蟲都繼承它。它只請求指定的start_urls或start_requests,在返回結(jié)果時(shí)調(diào)用parse方法。包括的屬性和方法有: ○ name 唯一標(biāo)識 ○ allowed_domains 爬取的作用域列表 ○ start_urls 開始爬取的url列表 ○ srart_requests 返回爬蟲開始爬取的請求枚舉 ○ make_requests_from_url(url) 將url轉(zhuǎn)化為請求 ○ parse(response) 當(dāng)請求沒指定回調(diào)時(shí),獲得請求結(jié)果時(shí)調(diào)用的默認(rèn)回調(diào)函數(shù) ○ log(message, [level, component]) 用scrapy.log.msg()記錄日志信息 ○ closed(reason) 關(guān)閉爬蟲 ● CrawlSpider scrapy.contrib.spiders.CrawlSpider抓取普通網(wǎng)站最常用的爬蟲,通過定義規(guī)則提供方便的跟蹤鏈接機(jī)制。除了繼承Spider的屬性外,它還有一個(gè)新的屬性rules,還暴露了一個(gè)可重寫的方法parse_start_url(response)。 ○ Crawling rules scrapy.contrib.spiders.Rule(link_extractor, callback=None, cb_kwargs=None, follow=None, process_links=None, process_request=None) ◎ link_extractor是個(gè)Link Extractor,它定義了如何從每個(gè)爬取頁面中提取鏈接。 ◎ callback在link_extractor提取鏈接后調(diào)用,它接收response作為參數(shù),必須返回包含Item和/或Request對象的列表。編寫爬取規(guī)則時(shí)避免使用parse作為回調(diào)函數(shù)。 |
|