我需要关注。我需要从我的 WordPress 博客中抓取帖子并在 VB 应用程序中显示它们。但新闻必须是新鲜的,当用户单击“刷新”时,它会从网站获取新内容。因此,从第一页发布帖子并链接到它。
有什么办法可以做到这一点吗?这可能吗?
这是很有可能的,我会给你三种可能的解决方案。
第一个解决方案是使用 Telerik 的(免费!)测试框架 http://www.telerik.com/teststudio/testing-framework。它旨在用于测试您的网站是否存在缺陷等,但它是一个出色的抓取工具。一旦您了解如何使用语法,这很可能是最快、最简单的解决方案,但它的开销也最大。它使用浏览器插件让您“控制”Mozilla Firefox、Google Chrome、Apple Safari 和 Microsoft Internet Explorer。这个的主要缺点是您必须在所有想要使用它的计算机上安装安装包。如果您只是构建一个简单的抓取工具来从您自己的博客获取数据,并且您只会在一台计算机上运行它,那么这可能是最好的方法。
我要提到的下一个刮刀叫做 Watin,你可以从 http://watin.org/ 获取它。与 Telerik 相比,我个人更喜欢这个,因为它只需要在您的项目中包含一些 dll,并且一旦部署,它就可以在另一台计算机上很好地工作,而无需安装任何特殊软件。不幸的是,也有一些警告。最大的问题是它自 2011 年以来就没有更新过,所以我假设该项目已经死了,尽管该网站仍然存在。由于缺乏更新,它官方仅支持 Internet Explorer 6、7、8、9 以及 FireFox 2 和 3(但我可以保证它在 Windows 7+8 上的 IE 10 + 11 中运行良好)。语法比 Teleriks 更奇怪,但它应该足够简单,可以满足您的需要。
我推荐的最后一个选项是使用 DotNet 内置的
HttpWebRequest
和 HttpWebResponse
类并手动进行抓取。我承认我有时仍然会使用这种方法。它基本上只是带回某个 url 的源代码,您必须使用字符串操作(或正则表达式,如果您擅长的话)来提取您需要的信息。这个的优点是它的开销最少,因为它不需要额外的 dll 或安装即可工作,而且速度非常快。我将为您提供一个示例函数,我已经在许多项目中使用和重用该函数来从网络中提取数据:
Private Function GetMethod(ByVal sPage As String) As String
Dim req As HttpWebRequest
Dim resp As HttpWebResponse
Dim stw As StreamReader
Dim sReturnString As String = ""
Dim sUserAgent As String = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)"
Try
req = HttpWebRequest.Create(sPage)
req.Method = "GET"
req.AllowAutoRedirect = False
req.UserAgent = sUserAgent
req.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
req.Headers.Add("Accept-Language", "en-us,en;q=0.5")
req.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7")
req.Headers.Add("Keep-Alive", "300")
req.KeepAlive = True
resp = req.GetResponse ' Get the response from the server
If req.HaveResponse Then
resp = req.GetResponse ' Get the response from the server
stw = New StreamReader(resp.GetResponseStream)
sReturnString = stw.ReadToEnd() ' Save the source code of the url into a string
Else
MessageBox.Show("No response received from host " & sPage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
Catch exc As WebException
MessageBox.Show("Network Error: " & exc.Message.ToString & " Status Code: " & exc.Status.ToString & " from " & sPage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
Return sReturnString
End Function
关于
sUserAgent
变量的注释:您可以将其更改为您想要模拟的任何用户代理。在本例中,我使用的是 Mozilla Firefox 5,它显然非常旧,但我已经使用此功能多年,不需要更新它。