Tag: web crawler

在.net 4.0中并行化Web爬虫的最佳实践

我需要通过代理下载很多页面。 构建multithreadingWeb爬网程序的最佳实践是什么? 是Parallel.For \ Foreach是否足够好还是更适合繁重的CPU任务? 您对以下代码怎么说? var multyProxy = new MultyProxy(); multyProxy.LoadProxyList(); Task[] taskArray = new Task[1000]; for(int i = 0; i { multyProxy.GetPage((string)obj); }, (object)”http://google.com” ); taskArray[i].Start(); } Task.WaitAll(taskArray); 它的工作非常糟糕。 这很慢,我不知道为什么。 这段代码也很糟糕。 System.Threading.Tasks.Parallel.For(0,1000, new System.Threading.Tasks.ParallelOptions(){MaxDegreeOfParallelism=30},loop => { multyProxy.GetPage(“http://google.com”); } ); 好吧,我认为我做错了什么。 当我开始我的脚本时,它只使用2%-4%的网络。

WebClient下载字符串与WebBrowser View源不同

我正在创建一个C#4.0应用程序来使用Web客户端下载网页内容。 WebClientfunction public static string GetDocText(string url) { string html = string.Empty; try { using (ConfigurableWebClient client = new ConfigurableWebClient()) { /* Set timeout for webclient */ client.Timeout = 600000; /* Build url */ Uri innUri = null; if (!url.StartsWith(“http://”)) url = “http://” + url; Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out innUri); try { client.Headers.Add(“User-Agent”, “Mozilla/4.0 (compatible; MSIE […]

跨多个HttpWebRequests使用相同的CookieContainer是否安全?

我正在做一种WebCrawler,我需要在请求之间保持Cookies状态。 我下载所有页面异步创建新的HttpWebRequest实例,但设置相同的CookieContainer。 页面可以写入和读取cookie。 我可以安全地做吗? 有没有任何替代方法不是CookieContainer的子类并在所有方法中放置锁? MSDN说这个类不是线程安全的,但在实践中,我能做到吗?

使用C#测试网站

伙计们, 我需要完成一些复杂的网络爬行。 简单的目标:登录页面,在某些文本字段中输入一些值,单击“提交”,然后从检索到的页面中提取一些值。 什么是最好的方法? 一些unit testing第三方lib? 在C#中手动爬行? 也许有一个特别准备好的lib? 还有其他方法吗? 这需要在Web应用程序中完成。 非常感谢您的帮助。

在C#中实现动态Web Scraper的逻辑

我期待用C#窗口forms开发Web scraper。 我想要完成的是如下: 从用户获取URL。 在WINForms中的IE UI控件(嵌入式浏览器)中加载网页。 允许用户选择文本(连续,小(不超过50个字符))。 从加载的网页。 当用户希望保留该位置( HTML DOM位置 )时,必须将其持久保存到DB中,以便用户可以在其后续访问期间使用该位置来获取该位置中的数据。 假设加载的网站是一个价格网站,并且引用的费率不断变化,我们的想法是坚持DOM层次结构,这样我下次就可以遍历它。 如果所有HTML元素都具有其id属性,我将能够这样做。 在id为null的情况下,我无法完成此操作。 有人可以建议一个有效的想法(如果可能的话,这是一个最低限度的代码片段)。 即使您可以共享一些在线资源,它也会有所帮助。 谢谢, 维杰

使用没有url的WebBrowser自动下载文件

我一直在使用System.Windows.Forms.WebBrowser编写一个用C#编写的WebCrawler。 我试图从网站上下载文件并将其保存在本地计算机上。 更重要的是,我希望这是完全自动化的。 可以通过单击调用javascript函数的按钮来启动文件下载,该函数会激活下载,显示“是否要打开或保存此文件?”对话框。 我绝对不想手动点击“另存为”,并输入文件名。 我知道HttpWebRequest和WebClient的下载function,但由于下载是用javascript启动的,我现在知道该文件的URL。 Fyi,javascript是一个doPostBack函数,可以更改某些值并提交表单。 我已经尝试将重点放在WebBrowser的save as对话框上,从而在那里自动化它,但没有取得多大成功。 我知道有一种方法可以强制下载保存,而不是通过向http请求添加标头来保存或打开,但我不知道如何指定要下载的文件路径。

防止自定义Web爬网程序被阻止

我正在使用C#创建一个新的网络爬虫来抓取一些特定的网站。 一切都很好。 但问题是有些网站在一些请求后阻止了我的抓取工具IP地址 。 我尝试在抓取请求之间使用时间戳。 但没有奏效。 有什么方法可以阻止网站阻止我的抓取工具? 像这样的一些解决方案会有所帮助(但我需要知道如何应用它们): 模拟谷歌机器人或雅虎诽谤 使用多个IP地址 (事件虚假IP地址)作为爬虫客户端IP 任何解决方案都有帮助

Web爬虫解析PHP / Javascript链接?

我目前正在使用C#中的HTML Agility Pack作为网络爬虫。 到目前为止,我设法避免了许多问题(无效的URI,例如“/extra/url/to/base.html”和“#”链接),但我还需要处理PHP,Javascript等。网站,链接是PHP,当我的网页抓取工具尝试导航到这些链接时,它会失败。 一个例子是PHP / Javascript手风琴链接页面。 我将如何导航/解析这些链接?

C#库类似于HtmlUnit

我需要编写独立的应用程序,它将“浏览”外部资源。 C#中有lib自动处理cookie并支持JavaScript(我认为不需要通过JS)吗? 主要目标是保持会话活动并提交表单,以便我可以在登录后通过多步骤注册过程或“浏览”网站。 我查看了Html Agility Pack,但看起来它不包含我需要的function – 表单提交或cookie支持。 谢谢,Artem。

大量下载网页C#

我的应用程序要求我将大量网页下载到内存中以进行进一步的解析和处理。 最快的方法是什么? 我目前的方法(如下所示)似乎太慢,偶尔会导致超时。 for (int i = 1; i<=pages; i++) { string page_specific_link = baseurl + "&page=" + i.ToString(); try { WebClient client = new WebClient(); var pagesource = client.DownloadString(page_specific_link); client.Dispose(); sourcelist.Add(pagesource); } catch (Exception) { } }