Python笔记——下载host

@teddyluo  December 12, 2019

了解了 host 的作用后,我们可以通过下载别人整理好的 host 来达到屏蔽广告或者优化网络访问效率的目的。

接下来通过一段 python 代码来演示 host 下载的流程

首先我们需要知道,host 在哪里下载,这里我选择了两个作为演示用的去广告 host:

https://hosts.nfz.moe/full/hosts
https://raw.githubusercontent.com/vokins/yhosts/master/hosts

选择这两个 host 源的原因是,前一个 host 源需要伪装 headers 才能访问,而 github 上的资源在我的网络环境下必须不带 headers 直接 request 才能访问(很奇怪,但是我在这里需要用 if 条件分支来执行区别化的访问)

访问 host 并下载的工作流程如下

未命名文件.jpg

确定工作流程后,上代码:

import os
import urllib.request
from bs4 import BeautifulSoup

在这里我使用 BeautifulSoup 将源网页中需要的内容字符串化。

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
url = []
data = {}
host = ''
urllist = open('D:/host/hostlist.txt')

这一步是用来为伪装 headers 作准备

for each_line in urllist:
    if each_line == '\n' :
        pass
    else:
        url.append(each_line)

在这里我写了一个判断条件,默认在 hostlist.txt 文件中是一行一个 url,但是遇到空行,需要跳过

for each in url:
    if each_line[:33] == 'https://raw.githubusercontent.com':
        response = urllib.request.urlopen(each)
        soup = BeautifulSoup(response,'html.parser')
        host = host + soup.prettify()
    else:
        response = urllib.request.Request(each)
        response = urllib.request.urlopen(response,data,headers)
        soup = BeautifulSoup(response,'html.parser')
        host = host + soup.prettify()

通过一个 if 判断是否 github 内容,如果是,则直接 request,如果不是,则添加伪装再访问。

f = open('host','w')
f.write(host)

最后创建这个文件,将 host 内容写入即可。


添加新评论