简而言之,我的网络爬虫有 2 个主要工作。收集器和爬虫,收集器将收集每个站点的所有 url 项并存储不重复的 url。爬虫将从存储中获取 url,提取所需的数据并将其存储回来。
2台机器
机器人 -> 8 核,物理 Linux 操作系统(这台机器上没有虚拟机)
存储机器 -> 带集群的 mySql(用于集群的 VM),2 个数据库(url 和数据);端口 1 和数据端口 2 上的 url 数据库
目标:爬取100个站点,努力减少瓶颈情况
第一种情况:收集器 *request(urllib) 所有站点,收集每个站点的 url 项,如果它是非重复的 url,则插入到端口 1 上的存储机器。爬虫 *从存储端口 1 获取 url,*请求站点并提取需要数据和*存储它回到端口 2
这会导致请求网站和 mySql 连接的连接瓶颈
第二种情况:收集器不是跨机器插入,而是将url存储在我自己的迷你数据库文件系统中。没有*读取大文件(使用os命令技术)只是*写入(追加)和*删除文件的标题。
这会导致连接请求网站和 I/O(读、写)瓶颈(可能)
这两种情况也都有收集和爬取 100 个站点的 CPU 绑定原因
正如我听说 I/O 绑定使用多线程,CPU 绑定使用多处理
两者怎么样?斗志昂扬?有什么想法或建议吗?