编写更快的Python Spider

时间:2009-12-05 22:28:40

标签: python web-crawler

我正在用Python写一个蜘蛛来抓取一个网站。麻烦的是,我需要检查大约250万页,所以我真的可以使用一些帮助使其优化速度。

我需要做的是检查一定数量的页面,以及是否找到记录链接到页面的页面。蜘蛛非常简单,只需要对很多页面进行排序。

我是Python的新手,但之前使用过Java和C ++。我还没有开始编码,因此任何有关库或框架的建议都会很棒。任何优化技巧也非常感谢。

6 个答案:

答案 0 :(得分:9)

你可以像谷歌那样使用MapReduce,通过Hadoop(特别是Python:12),Disco或{{3 }}

传统思路是用标准Python编写程序,如果发现它太慢,Happy,并优化特定的慢点。您可以使用profile it扩展名甚至C/C++下拉到C来更快地制作这些慢点。

如果您只抓住一个网站,请考虑使用wget -rctypes)。

答案 1 :(得分:5)

您在哪里存储结果?您可以使用PiCloud的云库轻松地在服务器群集中并行化您的抓取工作。

答案 2 :(得分:5)

由于您不熟悉Python,我认为以下内容对您有所帮助:)

  • 如果您正在编写正则表达式来搜索页面中的某个模式,请在任何地方编译正则表达式并重用已编译的对象
  • BeautifulSoup是一个html / xml解析器,可能对您的项目有用。

答案 3 :(得分:3)

用数百万个请求来抓住某人的网站并不是很有礼貌。您是否可以向网站管理员询问网站存档?一旦你有了这个,那就是文本搜索的简单问题。

答案 4 :(得分:3)

您在拼车时浪费了大量时间等待网络请求,因此您肯定希望并行提出请求。我可能会将结果数据保存到磁盘,然后在搜索该术语的文件上循环第二个进程。如果您需要额外的性能,那么这个阶段可以很容易地分布在多台机器上。

答案 5 :(得分:0)

亚当说的话。我这样做了一次来绘制Xanga的网络。我加快速度的方法是使用一个包含我必须查找的所有用户名的线程安全集。然后我有5个左右的线程同时发出请求并处理它们。您将花费更多时间等待页面到DL,而不是处理任何文本(最有可能),所以只需找到增加可以同时获得的请求数量的方法。