2013-03-25 114 views
0

我需要从下面的链接中下载第一/前5个日期的PDF文件,并将它们保存在桌面上。我不知道如何开始,但也找不到明确的谷歌。从网站/网页下载/保存文件

你认为你可以帮我吗?

http://cetatenie.just.ro/ordine/articol-11/

+1

你可以从这里开始:http://en.wikipedia.org/wiki/Web_scraping – rocky 2013-03-25 12:35:41

+0

OK,基本思路是明确的,是有可能通过VBA做到这一点?谢谢! – maximladus 2013-03-25 13:04:23

+0

是的,我认为这篇文章:http://blogs.msdn.com/b/lucian/archive/2009/02/21/web-scraping-with-vb-s-xml-support.aspx描述了你想要实现。 – rocky 2013-03-25 16:12:04

回答

2

我会使用IE浏览器,并使用SHDocVw.InternetExplorer对象自动执行它(VBA参考 'Microsoft Internet控制',ieframe.dll)。

您可以(一)创建使用Set x = New SHDocVw.InternetExplorer或(b)取得使用Set owins = CreateObject("Shell.Application").Windows现有的Internet Explorer窗口,一个新的Internet Explorer窗口(owins是一个数组,通过它循环,直到你找到一个地方Mid(TypeName(owins(i).Document), 1, 12) = "HTMLDocument")。

一旦你有一个Internet Explorer ie,你可以拨打ie.Navigate(url)去一个网站。

要等待的Internet Explorer浏览完你询问它之前,你可以运行类似:

Do While mascot_win.Busy 
    Application.Wait DateAdd("s", 1, Now) 
    DoEvents 
Loop 

要获取该网页上的第一个五年PDF文件的URL,你需要检查页面的HTML。有两种方法,取决于HTML的格式。如果HTML编写得很好,则可以使用ie.Document.all()导航文档对象模型(标记,如XML)。但是,如果HTML格式不正确,则可能不得不求助于阅读ie.Document.all(0).innerHTML中的HTML。

在你给的链接的外观,你会寻找的东西,如:

<li>Data de <strong>22.03.2013</strong>, numarul: <a href="/wp-content/uploads/Ordin-149P-din-22.03.2013.pdf">149P</a></li> 

一旦你已经相互隔离PDF URL(使用<a>标签的任何属性在DOM模型或使用大量的HTML Mid()电话),您可以使用下载:

Private Declare Function URLDownloadToFile _ 
Lib "urlmon" _ 
Alias "URLDownloadToFileA" _ 
(_ 
    ByVal pCaller As Long, _ 
    ByVal szURL As String, _ 
    ByVal szFileName As String, _ 
    ByVal dwReserved As Long, _ 
    ByVal lpfnCB As Long _ 
) As Long 

Dim ss As String 
Dim ts As String 
ss = "http://blah/blah/blah.pdf" 
ts = "c:\meh\blah.pdf" 
URLDownloadToFile 0, ss, ts, 0, 0 
+0

我想说,这里我需要的非常多,你在这里做了一项了不起的工作,我只需要一段时间来更好地理解“隔离”和的用法。非常感谢你! – maximladus 2013-03-26 08:44:27

+0

拉索,忘了告诉你,定期更新页面,并定期添加其他文件。我认为代码应该会改变一点...不是? – maximladus 2013-03-26 08:57:21

+0

只要你仍然想下载前五个文件,并且HTML仍然遵循相同的模式,那么你不需要改变代码。代码的一般结构可能会遍历元素,并且在识别并下载五个文件后,停止循环。只要网页作者只是将新文件添加到列表顶部,使用与他/她平常相同的模式,那么您的代码就不需要更改。 – user2185045 2013-03-27 05:46:59