3

我的项目处理从没有 API 或调用 API(如果有的话)的网站上抓取大量数据。使用多个线程来提高速度和实时工作。哪种编程语言更好?我对 Python 很满意。但是,线程是一个问题。因此,考虑在 node.js 中使用 JS。因此,我应该选择哪个?

4

3 回答 3

3

在 python 中,您可以对您的scrapers进行多线程处理。我过去用过Beautiful Soup,但还有其他选择。

由于我有使用 Beautiful Soup 的经验,因此下面是一个非常简单的示例,可以使用它对刮刀进行多处理。

from BeautifulSoup import BeautifulSoup
from multiprocessing import Process, JoinableQueue, cpu_count

jobs = []
queue = JoinableQueue()


class scraperClass(Process):
    def __init__(self,queue):
        Process.__init__(self)
        # Other init things
        
    def run(self):
        # your scraping code here
        # Perhaps save stuff to a DB?

            page = urllib2.urlopen(fullUrl)      # fullUrl can be passed in via the queue, or other possible methods
            soup = BeautifulSoup(page)
            # Read Beautiful Soup docs for how to parse further


def main():
    numProcesses = 2
    for i in xrange(numProcesses):
        p = scraperClass(queue)
        jobs.append(p)
        p.start()           # This will call the scapperClass.run() method

if __name__ == "__main__":
    main()
于 2012-05-31T13:50:00.653 回答
3

仅当您想并行计算多个事物时,线程才是 Python 中的一个问题。如果你只是想做很多请求,解释器的限制(只有一个线程一次解释python)不会成为问题。

事实上,要同时发出大量请求,您甚至不必使用大量线程。您可以使用异步请求库,例如requests.async

如果您对请求的结果有一些繁重的计算,您总是可以在 python 中使用multiprocessing并行化它,这使您能够绕过我之前谈到的线程限制。

于 2012-05-31T13:41:49.150 回答
0

我进行了快速搜索,发现了一个名为 Scrapy 的 pytohon 抓取框架。它看起来很酷,但我还没有尝试过:http ://scrapy.org/

这是他们教程的引述:

“所以你需要从网站中提取一些信息,但网站没有提供任何 API 或机制来以编程方式访问这些信息。Scrapy 可以帮助你提取这些信息。”

它说它也可以处理 API 调用

于 2012-05-31T13:38:11.003 回答