0

简而言之,我的网络爬虫有 2 个主要工作。收集器和爬虫,收集器将收集每个站点的所有 url 项并存储不重复的 url。爬虫将从存储中获取 url,提取所需的数据并将其存储回来。

2台机器

  1. 机器人 -> 8 核,物理 Linux 操作系统(这台机器上没有虚拟机)

  2. 存储机器 -> 带集群的 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 绑定使用多处理

两者怎么样?斗志昂扬?有什么想法或建议吗?

4

1 回答 1

0

看看 grequests,它不做实际的多线程或多处理,但它的扩展性比两者都要好。

于 2013-07-11T19:01:51.263 回答