• 代理信息[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产业工人,挣了日本人的钱还严重打击日本的软件业!

  • 相关阅读:
    Linux c 开发25 VScode C++ 运行中文乱码
    IEC104开发3 lib60870IEC 608705101 / 104 SOE
    Linux c 开发26 cmake生成项目
    STM32 例程7 STM32固件库方式 读取SHT20 温湿度
    基本电路学习1 12v转5V 电路
    github copilot 代码智能提示 AI代码提示
    Cesium polygon polyline entity label 贴地 点线面文本模型贴地 clampToGround 地面遮挡 地底遮挡 文字遮挡 道路遮挡 地形遮盖 地图遮盖
    UE4 HTTP REST 请求与高德天气预报接口 VaRest 插件
    UE4 蓝图截图 全屏截图 蓝图笔记截图 蓝图高清截图 蓝图保存插件 Blueprint Graph Screenshot(蓝图截图插件)
    window Carnac 实时显示键盘按键 桌面显示按钮 虚拟键盘 演示键盘 直播教学键盘
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3074267.html
Copyright © 2020-2023  润新知