论坛首页 综合技术论坛

爬虫进阶之提高爬虫效率的方式

浏览 475 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2022-05-17  
相信来看这篇深造爬虫文章的同学,大部分已经对爬虫有不错的了解了,也在之前已经写过不少爬虫了,但我猜爬取的数据量都较小,因此没有过多的关注爬虫的爬取效率。这里我想问问当我们要爬取的数据量为几十万甚至上百万时,那我们需要多久才能完成。
大家马上想到的办法就是让爬虫可以 7×24 小时不间断工作,我们能做的就是多叫几个爬虫一起来爬数据,这样便可大大提升爬虫的效率。但在介绍Python 如何让多个爬虫一起爬取数据之前,我想先为大家介绍一个概念——并发。我们用 requests 成功请求一个网页,实际上 requests 做了三件事:1、根据链接、参数等组合成一个请求;2、把这个请求发往要爬取的网站,等待网站响应;3、网站响应后,把结果包装成一个响应对象方便我们使用。所以我们可以根据需求增加并发来达到提高爬虫效率。
还有就是在访问目标网站的过程中我们也会遇到反爬机制,也是会阻碍我们的爬虫效率,这样的情况下我们只有通过添加代理IP来解决,而且如果我们需要采集更多的数据量,就需要更多的IP池支持。IP池的使用这里我们简单的示例下:
#! -*- encoding:utf-8 -*-

    import requests
    import random

    # 要访问的目标页面
    targetUrl = "http://httpbin.org/ip"

    # 要访问的目标HTTPS页面
    # targetUrl = "https://httpbin.org/ip"

    # 代理服务器(产品官网 www.16yun.cn)
    proxyHost = "t.16yun.cn"
    proxyPort = "31111"

    # 代理验证信息
    proxyUser = "username"
    proxyPass = "password"

    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
        "user" : proxyUser,
        "pass" : proxyPass,
    }

    # 设置 http和https访问都是用HTTP代理
    proxies = {
        "http"  : proxyMeta,
        "https" : proxyMeta,
    }


    #  设置IP切换头
    tunnel = random.randint(1,10000)
    headers = {"Proxy-Tunnel": str(tunnel)}



    resp = requests.get(targetUrl, proxies=proxies, headers=headers)

    print resp.status_code
    print resp.text
还有一种方式可以提高我们的爬虫效率,那就是我们可以使用多线程爬虫,但是这里需要考虑到被爬网站的性能和其反爬机制,我们也不应该让机器过快地去运行爬虫,线程的数量也是需要有一定限制的。
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics