新聞中心
在我們創(chuàng)建配置文件的時(shí)候,可能會(huì)出現(xiàn)一些值需要重復(fù)填寫(xiě)多次的問(wèn)題。例如我最近寫(xiě)了一個(gè)可配置爬蟲(chóng),只需要配置幾條 XPath,就能夠自動(dòng)生成一個(gè) Scrapy 爬蟲(chóng)。從而快速完成簡(jiǎn)單網(wǎng)站的爬取。

目前創(chuàng)新互聯(lián)已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、瀘縣網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
這個(gè)配置文件長(zhǎng)這樣:
- name: 某某網(wǎng)站爬蟲(chóng)
- host: 'https://www.kingname.info'
- headers:
- user-agent: xxx
- host: yyyy
- referer: zzz
- rule:
- start_url: 'https://www.kingname.info'
- detail_url: //div[@class="xxx"]/a/@href
- next_page_xpath: //div[@class="next"]/@href
- ...其他配置參數(shù)...
這個(gè)配置文件是使用 YAML 格式創(chuàng)建的。我們可以看到,最外層的host的值為https://www.kingname.info,而在rule里面,start_url的值也是這個(gè)網(wǎng)址。這樣就重復(fù)了。這種重復(fù)的情況還有很多,例如列表頁(yè)的翻頁(yè)鏈接的 XPath 與正文頁(yè)的翻頁(yè)鏈接的 XPath 是一樣的,多個(gè)類型可以具有相同的執(zhí)行規(guī)則等等。
如果你使用 JSON 來(lái)作為配置文件的格式,那么確實(shí)你要重復(fù)寫(xiě)。但如果你使用 YAML 來(lái)作為配置文件的格式,那么你可以通過(guò)添加錨記(anchor)和別名(alias)的方式,實(shí)現(xiàn)一次填寫(xiě),多次使用的效果。
我們先來(lái)看一個(gè)簡(jiǎn)單的例子:
- import yaml
- config = '''
- name: &name 青南
- salary: 99999
- other_name: *name
- '''
- info = yaml.safe_load(config)
- print(info)
運(yùn)行效果如下圖所示:
可以看到,原本定義一個(gè)key-value類型的值,應(yīng)該是key: value的形式,但是這里我寫(xiě)成key: &錨記名 value,于是,這個(gè)錨記名就相當(dāng)于是一個(gè)變量名,就可以在其他地方引用。引用的時(shí)候,寫(xiě)作*錨記名。這有點(diǎn)像 C 語(yǔ)言中的獲取變量的內(nèi)存地址(&),然后顯示指針的值(*)。錨記名可以 key 相同,也可以不同。
當(dāng)然,除了簡(jiǎn)單的key-value,也可以在復(fù)雜的場(chǎng)景下使用,例如:
- import yaml
- config = '''
- article_xpath: &article
- title: //div[@class="title"]/text()
- detail: //div[@class="content"]/text()
- image:
- - //div/img[@class="xx"]/@href
- - //p/img[@class="yy"]/@href
- about_xpath:
- summary: //div[@class="summary"]/text()
- book_xpath: *article
- '''
- info = yaml.safe_load(config)
運(yùn)行效果如下圖所示:
這樣一來(lái),如果某一項(xiàng)會(huì)多次出現(xiàn)的配置發(fā)生了修改,我們只需要改一個(gè)地方,就能在多個(gè)地方同時(shí)自動(dòng)生效,不用再一個(gè)一個(gè)手動(dòng)修改了。既節(jié)省了時(shí)間又不容易出錯(cuò)。
本文轉(zhuǎn)載自微信公眾號(hào)「未聞Code」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系未聞Code公眾號(hào)。
本文名稱:一日一技:如何處理配置文件中的重復(fù)值?
文章源于:http://m.fisionsoft.com.cn/article/ccshggc.html


咨詢
建站咨詢
