Perl在获取HTML页面时胜过Python?

fir*_*may 6 html python perl

我有一个获取html页面的Perl脚本.我尝试用Python重写它(Just Coz我正在尝试学习Python),我发现它真的很慢!

这是Perl中的测试脚本

#!/usr/bin/perl
use LWP::Simple;

$url = "http://majorgeeks.com/page.php?id=";

open(WEB,">>"."perldata.txt");

for ($column = 1 ; $column <= 20 ; $column ++)

{

    $temp = $url.$column;
    print "val = $temp\n\n";

    $response=get($temp)or die("[-] Failed!!\n");

    print WEB "$response\n\n";

}
Run Code Online (Sandbox Code Playgroud)

这是Python中的等效代码

import urllib2

url = "http://majorgeeks.com/page.php?id="

f = open("pydata.txt", 'w')

for i in range(20):

   tempurl = url + str(i+1)
   print "Val : " + tempurl + "\n\n"

   #req = urllib2.Request(tempurl)
   res = urllib2.urlopen(tempurl)

   f.write(res.read())

f.close()
Run Code Online (Sandbox Code Playgroud)

我发现的差异是巨大的!Perl脚本在大约30秒内完成.虽然Python脚本花了大约7分钟.(420秒)!!

我正在使用Ubuntu 11.10,64bit,Core i7,在12MBPS连接上进行测试.我试了几次,每次都得到相同数量的差异.

我在这里做错了吗?或者我需要做点什么?或者差异是否合理?(我希望不是)

非常感谢你的帮助.

更新3:我刚刚回家并启动我的笔记本电脑,再次运行代码,它在11秒内完成!:/是因为我"重新启动"我的comp? 这是 Profiler输出

注意 - Perl仍然花了31秒同样的事情!! :/

更新2:由于@Makoto建议下面是本人曾于分析器数据.这真的很慢!我知道一些python配置与此有关,但不知道是什么.一个简单的要求,它不应该需要20秒!

更新:修复了网址到tempurl.按照此处的建议注释掉urllib2.Request.根本没什么区别.

Tad*_*eck 2

您的代码可以改进,尽管我不确定它会解决所有性能问题:

from urllib2 import urlopen

url = "http://majorgeeks.com/page.php?id={}"

with open("pydata.txt", 'w') as f:
    for i in xrange(1, 21):
        tempurl = url.format(i)
        print "Val : {}\n\n".format(tempurl)
        f.write(urlopen(tempurl).read())
Run Code Online (Sandbox Code Playgroud)

我也在逻辑上更改了它 - 它现在请求不同的 URL(由 定义tempurl),它过去请求相同的 URL 20 次(由 定义url)。我还使用了字符串格式化,尽管我不确定它如何影响效率。

我在我的系统(Windows 7 64 位、Python 2.7.2、空闲、中等互联网连接)上测试了它,花了 40 秒(40.262)完成。