zoukankan      html  css  js  c++  java
  • 代理信息[Python] 实现网络爬虫

    这几周一直在学习代理信息之类的问题,上午正好有机会和大家分享一下.

        

    1、什么是网络爬虫

        网络爬虫是现代搜索引擎技术的一种非常核心、基础的技术,网络就好比是一张蜘蛛网,网络爬虫就像是一只蜘蛛,在网络间‘爬来爬去’,搜索有效的信息。

        

    2、抓取代理服务器的网络爬虫

        本文分析用python实现抓取代理服务器的网络爬虫,重要步调是:

        1)利用urllib2获得提供代理服务的网页信息(本文以http://www.cnproxy.com/proxy1.html为例)

        2)利用正则表达式获得代理ip信息

        3)利用多线程技术验证代理ip的有效性

        

    1)、抓取代理ip列表

    def get_proxy_list():
        '''
        http://www.cnproxy.com/proxy1.html
        http://www.cnproxy.com/proxy2.html
        http://www.cnproxy.com/proxy3.html
        '''
        portdicts = {'z':"3",'m':"4",'a':"2",'l':"9",'f':"0",'b':"5",'i':"7",'w':"6",'x':"8",'c':"1"}
        proxylist = []    
        p=re.compile(r'''<tr><td>(.+?)<SCRIPT type=text/javascript>document.write\(":"\+(.+?)\)</SCRIPT></td><td>(.+?)</td><td>.+?</td><td>(.+?)</td></tr>''')
        for i in range(1,4):
            target = r'http://www.cnproxy.com/proxy%d.html' %i
            req = urllib2.urlopen(target)
            result =  req.read()
            match = p.findall(result)
            for row in match:
                ip = row[0]
                port =row[1]
                port = map(lambda x:portdicts[x],port.split('+'))
                port = ''.join(port)
                agent = row[2]
                addr = row[3].decode("cp936").encode("utf-8")
                proxylist.append([ip,port,agent,addr])
        return proxylist

        首先利用urllib2模块获得网页信息,然后利用re模块匹配代理服务器信息,把所有抓取的代理服务器信息存入proxylist里,并返回。

        每日一道理
    那蝴蝶花依然花开花落,而我心中的蝴蝶早已化作雄鹰飞向了广阔的蓝天。

        

    2)、利用多线程验证代理服务器的有效性

    class ProxyCheck(threading.Thread):
        def __init__(self,proxy):
            threading.Thread.__init__(self)
            self.proxy = proxy
            self.timeout = 5
            self.test_url ="http://www.baidu.com/"
            self.test_str = "030173"
                  
        def run(self):
            global checkedProxyList
            cookies = urllib2.HTTPCookieProcessor()
            proxy_handler = urllib2.ProxyHandler({"http" : r'http://%s:%s' %(proxy[0],proxy[1])})
            opener = urllib2.build_opener(cookies,proxy_handler)
            opener.addheaders = [('User-agent', 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3')] 
            urllib2.install_opener(opener)
            starttime=time.time()
            try:
                req = urllib2.urlopen(self.test_url,timeout=self.timeout)
                result = req.read()
                timeused = time.time()-starttime
                pos = result.find(self.test_str)     
                if pos > -1:
                    checkedProxyList.append((proxy[0],proxy[1],proxy[2],proxy[3],timeused))     
                    print "%s:%s\t%s\t%s\t%s\n"%(proxy[0],proxy[1],proxy[2],proxy[3],timeused)
            except Exception,e:
                print e.message

        我们通过代理连接百度网站,验证代理是否有效,一旦验证该代理有效,就打印出该代理的信息。

        

    3)、main函数

    if __name__ == '__main__':
        proxylist = get_proxy_list()
        checkedProxyList=[]
        for proxy in proxylist:
            t = ProxyCheck(proxy)
            t.start()

    文章结束给大家分享下程序员的一些笑话语录: IT业众生相
    第一级:神人,天资过人而又是技术狂热者同时还拥有过人的商业头脑,高瞻远瞩,技术过人,大器也。如丁磊,求伯君。
    第二级:高人,有天赋,技术过人但没有过人的商业头脑,通常此类人不是顶尖黑客就是技术总监之流。
    第三级:牛人,技术精湛,熟悉行业知识,敢于创新,有自己的公司和软件产品。
    第四级:工头,技术精湛,有领导团队的能力,此类人大公司项目经理居多。
    第五级:技术工人,技术精湛,熟悉行业知识但领导能力欠加,此类人大多为系分人员或资深程序员,基本上桀骜不逊,自视清高,不愿于一般技术人员为伍,在论坛上基本以高手面目出现。
    第六级:熟练工人,技术有广度无深度,喜欢钻研但浅尝辄止。此类人大多为老程序员,其中一部分喜欢利用工具去查找网上有漏洞的服务器,干点坏事以获取成绩感。如果心情好,在论坛上他们会回答菜鸟的大部分问题。此级别为软件业苦力的重要组成部分。
    第七级:工人,某些技术较熟练但缺乏深度和广度,此类人大多为程序员级别,经常在论坛上提问偶尔也回答菜鸟的问题。为软件产业苦力的主要组成部分。
    第八级:菜鸟,入门时间不长,在论坛上会反复提问很初级的问题,有一种唐僧的精神。虽然招人烦但基本很可爱。只要认真钻研,一两年后就能升级到上一层。
    第九级:大忽悠,利用中国教育的弊病,顶着一顶高学历的帽子,在小公司里混个软件部经理,设计不行,代码不行,只会胡乱支配下属,拍领导马屁,在领导面前胡吹海侃,把自己打扮成技术高手的模样。把勾心斗角的办公室文化引入技术部门,实在龌龊!
    第十级:驴或傻X,会写SELECT语句就说自己精通ORALCE,连寄存器有几种都不知道就说自己懂汇编,建议全部送到日本当IT产业工人,挣了日本人的钱还严重打击日本的软件业!

  • 相关阅读:
    Libcurl
    Inno Setup教程
    APICloud平台的融云2.0集成
    关于mysql建立索引 复合索引 索引类型
    linux恢复误删除文件-extundelete
    OpenStack QA
    Android之应用程序怎样调用支付宝接口
    NYOJ 22 素数求和问题
    Mycat(5):聊天消息表数据库按月分表实践,平滑扩展
    opencv对图像进行边缘及角点检測
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3074267.html
Copyright © 2011-2022 走看看