美文网首页
利用代理ip和多线程爬取信息

利用代理ip和多线程爬取信息

作者: 此间不留白 | 来源:发表于2017-12-04 22:03 被阅读32次

    前言

    在上篇文章中,讲述了如何获取代理ip,当获取了足够多的代理ip之后,可以使用代理ip更高效的爬取网络信息,同时,当爬取大规模的数据时,利用多线程可以实现更快的爬取速度,现在总结一下如何在自己的爬虫中使用代理ip和多线程

    代理ip的利用

    上次爬取代理ip之后,发现这些ip信息有两种类型,分别是http和https,那么相对应的对于这两种不同类型的ip,应该分别做不同的处理.
    详细代码如下,返回值为一字典:

    def proxys():
        url = "http://www.xicidaili.com/"
    
        ips_list = get_ips(url) #获取代理ip的函数,返回值为一列表
        proxy_ip = random.choice(ips_list) #在列表中随机的获取一代理ip
    '''
    如果ip信息为http开始,构建http类型的字典,反之,构建https类型的字典
    '''
        if proxy_ip.startswith('http'):  
            proxies = {'http':proxy_ip}
        elif proxy_ip.startswith('https'):
            proxies = {'https':proxy_ip}
        return proxies
    

    最后,再request.get函数中的使用如下:

    wb_data = requests.get(url=pages_url,headers=headers,proxies=proxys())
    

    多线程的利用

    首先,导入多线程所需要的库

    from multiprocessing import Pool
    

    多线程的实现代码如下:

        pool = Pool(6)
        pool.map(get_all_links_from,channel_list)
        pool.close() #关闭进程池(pool),使其不在接受新的任务。
        pool.join() #主进程阻塞等待子进程的退出,join方法必须在close或terminate之后使用
    

    在以上代码中,我们实例化了一个Pool类的对象,并为其分配了六个线程,
    然后调用了map函数.
    注意: map()函数有两个参数,第一个为多线程执行的函数,另一参数为一迭代器,在本例中,我们使用的是一列表类型的参数.

    相关文章

      网友评论

          本文标题:利用代理ip和多线程爬取信息

          本文链接:https://www.haomeiwen.com/subject/cpyfixtx.html