通过代理上网的方式

有个很好的网站,定时刷新国内外高匿/透明代理,所以我们第一步需要做的就是把它的代理抓取下来。

代码如下:

#coding:utf-8
import urllib2
import urllib
from HTMLParser import HTMLParser

proxyUrl = 'http://www.xicidaili.com/wn'
filePath = 'c:/proxy.txt'

class ProxyHtmlParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.trStart = False
        self.tdStart = False
        self.proxyList = list()
        self.tmpList = list()

    def handle_endtag(self, tag):
        if tag == 'tr':
            self.trStart = False
            if len(self.tmpList) > 0:
                self.proxyList.append(self.tmpList)
        elif tag == 'td':
            self.tdStart = False

    def handle_starttag(self, tag, attrs):
        if tag == 'tr':
            self.trStart = True
            self.tmpList = list()
        elif tag == 'td':
            self.tdStart = True

    def handle_data(self, data):
        if self.trStart and self.tdStart:
            self.tmpList.append(data)

    def getList(self):
        return [[item[0],item[1]] for item in self.proxyList]

def abstractProxyInfo():
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.81 Safari/537.36',
        'Content-Type':'text/html; charset=utf-8'
    }
    req = urllib2.Request(proxyUrl,headers=headers)
    res = urllib2.urlopen(req)
    return res.read()

def writeProxyFile(proxyList):
    with open(filePath,"w") as f:
        for item in proxyList:
            f.write("%s:%s\n"%(item[0],item[1],))

if __name__ == '__main__':
    htmlContent = abstractProxyInfo()

    proxyParser = ProxyHtmlParser()
    proxyParser.feed(htmlContent)
    proxyList = proxyParser.getList()
    
    writeProxyFile(proxyList)
    print 'done!'


具体做的事情,就是1.抓取页面(我访问的URL是该网站国外高匿代理页面)2.用HTMLParser分析页面,得到IP和端口数组 3.把IP:端口按行写入c盘下的proxy.txt中

得到了这些代理后,可以自己手动在浏览器中配,但这样太累(因为代理的可连接性是随时变化的)。

所以可以用一个类似花刺代理的工具:

通过代理上网的方式_第1张图片

把代理文本文档导入,然后验证一下可连接性;最后剩余的那些可以连接的上的,就可以选一个速度最快的设为IE代理。然后就可以用Chrome/IE进行网页浏览了。


PS:此方法只是在自己访问网站不想暴露IP时用,不可用于访问google;因为GFW是双向拦截的,它发现国外IP向国内传非法内容(请求经过代理提交,最后内容还是得回传)会直接封掉国外的这个代理。


你可能感兴趣的:(通过代理上网的方式)