作者: laical123456
查看: 1291|回复: 0
打印 上一主题 下一主题

[讨论] 爬虫中多线程的运用

[复制链接]
跳转到指定楼层
楼主
laical123456 发表于 2021-6-2 15:33:42 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
查看: 1291|回复: 0
线程简单来说就是爬虫程序中的一个命令执行。单线程就是爬虫程序执行一个命令,多线程就是爬虫程序同时运行多个命令,多线程不仅能提高速度,也能加快采集进度。当然多线程也有优点,也有缺点,线程也是爬虫程序中的一部分,使用多线程会占用爬虫程序的内存,有可能会导致占用的内存越来越多。所以多线程需要技术去调试和管理。爬虫使用多线程的目的性就是为了提高抓取的数据效率,如果有些网站对访问速度有限制,就可以采用多线程,每个线程使用爬虫代理IP采集数据。
python爬虫支持多线程数据采集,为了实现python爬虫多线程,可以采用一下方案思路:
在采集的目标网站中下载页面,然后在已下载的页面中更新出新的网址,依次类推,就相当于在python爬虫使用多线程来处理网络请求,使用爬虫代理获取API连接中的API连接里面数据,然后将返回的数据结果保存,其它线程在分析这个数据,最后储存在文件中。
多线程代码参考:
[AppleScript] 纯文本查看 复制代码
    #! -*- 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()

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播
回复 论坛版权

使用道具 举报

您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-11-25 04:29, Processed in 0.525493 second(s), 30 queries , Gzip On.

快速回复 返回顶部 返回列表