日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
一日一技:如何處理配置文件中的重復(fù)值?

在我們創(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)這樣:

 
 
 
 
  1. name: 某某網(wǎng)站爬蟲(chóng) 
  2. host: 'https://www.kingname.info' 
  3. headers:  
  4.  user-agent: xxx 
  5.   host: yyyy 
  6.   referer: zzz 
  7. rule: 
  8.   start_url: 'https://www.kingname.info' 
  9.   detail_url: //div[@class="xxx"]/a/@href 
  10.   next_page_xpath: //div[@class="next"]/@href 
  11.   ...其他配置參數(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è)類(lèi)型可以具有相同的執(zhí)行規(guī)則等等。

如果你使用 JSON 來(lái)作為配置文件的格式,那么確實(shí)你要重復(fù)寫(xiě)。但如果你使用 YAML 來(lái)作為配置文件的格式,那么你可以通過(guò)添加錨記(anchor)和別名(alias)的方式,實(shí)現(xiàn)一次填寫(xiě),多次使用的效果。

我們先來(lái)看一個(gè)簡(jiǎn)單的例子:

 
 
 
 
  1. import yaml 
  2.  
  3. config = ''' 
  4. name: &name 青南 
  5. salary: 99999 
  6. other_name: *name 
  7. ''' 
  8. info = yaml.safe_load(config) 
  9. print(info) 

運(yùn)行效果如下圖所示:

可以看到,原本定義一個(gè)key-value類(lèi)型的值,應(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)景下使用,例如:

 
 
 
 
  1. import yaml 
  2.  
  3. config = ''' 
  4. article_xpath: &article 
  5.     title: //div[@class="title"]/text() 
  6.     detail: //div[@class="content"]/text() 
  7.     image:  
  8.         - //div/img[@class="xx"]/@href 
  9.         - //p/img[@class="yy"]/@href 
  10. about_xpath: 
  11.     summary: //div[@class="summary"]/text() 
  12. book_xpath: *article 
  13. ''' 
  14. 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ù)值?
文章URL:http://www.5511xx.com/article/ccshggc.html