文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

一日一技:如何处理配置文件中的重复值?

2024-12-03 14:01

关注

在我们创建配置文件的时候,可能会出现一些值需要重复填写多次的问题。例如我最近写了一个可配置爬虫,只需要配置几条 XPath,就能够自动生成一个 Scrapy 爬虫。从而快速完成简单网站的爬取。

这个配置文件长这样:

  1. name: 某某网站爬虫 
  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.   ...其他配置参数... 

这个配置文件是使用 YAML 格式创建的。我们可以看到,最外层的host的值为https://www.kingname.info,而在rule里面,start_url的值也是这个网址。这样就重复了。这种重复的情况还有很多,例如列表页的翻页链接的 XPath 与正文页的翻页链接的 XPath 是一样的,多个类型可以具有相同的执行规则等等。

如果你使用 JSON 来作为配置文件的格式,那么确实你要重复写。但如果你使用 YAML 来作为配置文件的格式,那么你可以通过添加锚记(anchor)和别名(alias)的方式,实现一次填写,多次使用的效果。

我们先来看一个简单的例子:

  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) 

运行效果如下图所示:

可以看到,原本定义一个key-value类型的值,应该是key: value的形式,但是这里我写成key: &锚记名 value,于是,这个锚记名就相当于是一个变量名,就可以在其他地方引用。引用的时候,写作*锚记名。这有点像 C 语言中的获取变量的内存地址(&),然后显示指针的值(*)。锚记名可以 key 相同,也可以不同。

当然,除了简单的key-value,也可以在复杂的场景下使用,例如:

  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) 

运行效果如下图所示:

这样一来,如果某一项会多次出现的配置发生了修改,我们只需要改一个地方,就能在多个地方同时自动生效,不用再一个一个手动修改了。既节省了时间又不容易出错。

本文转载自微信公众号「未闻Code」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。

 

来源:未闻Code 内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯