爬虫中多线程的运用

laical1   发布于 2021年06月02日   阅读次数: 1672   

参考链接   Tag: 爬虫

线程简单来说就是爬虫程序中的一个命令执行。单线程就是爬虫程序执行一个命令,多线程就是爬虫程序同时运行多个命令,多线程不仅能提高速度,也能加快采集进度。当然多线程也有优点,也有缺点,线程也是爬虫程序中的一部分,使用多线程会占用爬虫程序的内存,有可能会导致占用的内存越来越多。所以多线程需要技术去调试和管理。爬虫使用多线程的目的性就是为了提高抓取的数据效率,如果有些网站对访问速度有限制,就可以采用多线程,每个线程使用爬虫代理IP采集数据。
python爬虫支持多线程数据采集,为了实现python爬虫多线程,可以采用一下方案思路:
在采集的目标网站中下载页面,然后在已下载的页面中更新出新的网址,依次类推,就相当于在python爬虫使用多线程来处理网络请求,使用爬虫代理获取API连接中的API连接里面数据,然后将返回的数据结果保存,其它线程在分析这个数据,最后储存在文件中。
多线程代码参考:
    #! -*- encoding:utf-8 -*-

    import aiohttp, asyncio


    targetUrl = "http://httpbin.org/ip"

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

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

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

    userAgent = "Chrome/83.0.4103.61"

    async def entry():
        conn = aiohttp.TCPConnector(verify_ssl=False)

        async with aiohttp.ClientSession(headers={"User-Agent": userAgent}, connector=conn) as session:
            async with session.get(targetUrl, proxy=proxyServer) as resp:
                body = await resp.read()

                print(resp.status)
                print(body)

    loop = asyncio.get_event_loop()
    loop.run_until_complete(entry())
    loop.run_forever()