2011-02-12 106 views
0

您好我正在编写一个网络爬虫,它将抓取网站和有选择地解析网站的不同部分。VB.Net HTTPWebRequest速度比较慢比较Python URLOpen

我是一个.NET开发人员,因此选择是显而易见的,我做到了在.net但速度很慢,其中包括下载和HTMLPages

然后我试图刚才下载的内容,首先使用的解析。网络,然后相同的域使用Python,但Python在下载数据非常令人印象深刻。我已经使用python实现了下载,但是后面的部分在python中并不容易编码,这显然我不想这样做。

同一批次域历时100秒的Python 正在采取基于在.net20分钟履带

我试图http://www.eqlit.com/下载并用了8秒Python和同在.net正在采取100秒履带

有没有人有任何想法为什么这是缓慢的.NET,但在python中快速?

+0

保健佳品代码示例,你如何实现`HttpWebRequest`? – 2011-02-12 06:24:29

+0

我不确定,但似乎python脚本正在使用http压缩。 – Adeel 2011-02-12 06:25:27

回答

2

HttpWebRequest一次只能连接2个连接,所以如果你下载的内容和html一起(如图片,样式表,js等),或者你正在使用多线程,那么你将达到连接限制。

您需要更改ServicePointManager中的设置。

http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.defaultconnectionlimit.aspx

此链接解释你需要做什么。 http://blogs.msdn.com/b/jpsanders/archive/2009/05/20/understanding-maxservicepointidletime-and-defaultconnectionlimit.aspx

您可能还想在设置时设置这些设置。

ServicePointManager.UseNagleAlgorithm = true; 
ServicePointManager.Expect100Continue = true; 
ServicePointManager.CheckCertificateRevocationList = true; 
ServicePointManager.DefaultConnectionLimit = 10; // for example 

另一种方法是使用一个配置文件为您的应用程序,并使用以下

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.net> 
    <connectionManagement> 
     <add address="*" maxconnection="10"/> 
    </connectionManagement> 
    </system.net> 
</configuration>