ubuntu下使用Shell脚本和Scrapy进行hosts自动更新

谷歌娘上不去是一个永远挥之不去的痛,有很多可以FQ的方法,其中之一就是修改/etc/hosts文件,通过域名重定向的方法,访问Google(以及其他的网站你懂的……),感谢乱炖给我们提供了一个保持更新的可靠的hosts源:http://levi.cg.am/test/hosts/rander/?d=11.18.2,笔者常用的是第一个360kb的hosts源,除了google基本上不太有其他的需求。为什么hosts不能只修改一次呢,这种非技术问题就不在这里讨论了。

恰巧笔者又是一个非常懒的人,就连打开Chromium–>点击书签页–>点击中间硕大的“选择并复制所有hosts”–>F1–>sudo gedit /etc/hosts–>Ctrl+V,这么短短几步,都不愿意操作,于是就萌生了利用网络爬虫工具,提取360kb的hosts源,并自动替换系统hosts的想法。往事具备,只差coding了!

准备工具:scrapy,参考http://www.linuxidc.com/Linux/2015-03/115306.htm这篇文章,装好网络爬虫工具Scrapy:

a)pip package : sudo apt-get install python-pip
b)python dev : sudo apt-get install python-dev
c)SCRAPY : sudo pip install scrapy
d)Twisted支持:sudo apt-get install python-twisted

关于scrapy的介绍就不在这赘言了,仔细分析了一下乱炖网站的特性,发现hosts的文本内容存在于textarea标签中,且360kb的源是第一个textarea,那么就在spiders中创建了hostsSpider.py文件:
hostsSpider.py
其中#4处的含义是提取response中所有标签为textarea的sites,之后进行一个循环,第一个textarea即为我需要的360kb源。

到这一步其实就已经可以出结果了,在terminal中工程目录下运行:scrapy crawl getGoogleHosts(对应name中设置的),就可以将网站中的hosts到出到hosts_new文件中,由于其中包含有中文,所以需要修改默认编码方式为UTF-8,如上,利用scrapy进行爬虫的步骤就算是结束了。

光有自动爬虫,导出到本地文件还不够,笔者不想每次都移到工程目录下,输入scrapy的指令,那么此时,linux下的shell命令编程就要发光发热了:

新建文件updateHosts.sh,和getHosts放在同一级目录下。

光是把网上的hosts源替换掉系统的/etc/hosts是不行的,对于127.0.0.1的解析也是要加进去的,一个是localhost,一个是hostname,脚本文件如下:
updateHosts.sh
查看脚本文件很容易看出,先是通过scrapy将网站上的hosts提取出来,放在hosts_new文件中,利用cat指令将含有127.0.0.1信息的hosts_org进行合并。将完整的hosts文件,通过cp指令替换掉系统中的hosts,并重启网络,完成更新!

这样的话,每次只要在terminal中输入如下指令即可完成对hosts的更新!

sudo bash updateHosts.sh

源码https://github.com/Susreal/getHosts/

由于笔者也是近期才开始接触ubuntu,很多东西都是现学现卖,但是也希望能通过博客记录的方式,记录下自己的学习进程,大家不嫌弃的话,也可以对我进行纠正指导,我万分感谢。

Susreal

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值