我需要关注。我需要从我的WordPress博客中删除帖子并在VB应用程序中显示它们。但是当用户点击"刷新"时,新闻必须是新鲜的。它从网站获取新内容。所以,从第一页发布帖子并链接到它。
有什么办法吗?这甚至可能吗?
答案 0 :(得分:0)
这是非常可能的,我会给你三种可能的解决方案。
第一个解决方案是使用Telerik(免费!)测试框架http://www.telerik.com/teststudio/testing-framework。它旨在用于测试您的网站的缺陷和诸如此类的东西,但它是一个优秀的刮刀。一旦您了解了如何使用语法,这很可能是最快速,最简单的解决方案,但它也具有最大的开销。它使用浏览器插件来“控制”Mozilla Firefox,谷歌浏览器,Apple Safari和Microsoft Internet Explorer。这个的主要缺点是您必须在要使用它的所有计算机上安装安装程序包。如果您只是构建一个简单的scraper来从您自己的博客获取数据,而您只在一台机器上运行它,这可能是最好的方法。
我要提到的下一个刮刀叫做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或安装工作,而且速度非常快。我将为您提供一个示例函数,我已经在许多项目中使用并重用它来从Web中提取数据:
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显然已经超级老了,但我已经使用这个功能多年了,不需要更新它。