http://www.cna.com.tw/news/afe/201805230211-1.aspx
在抓內文時可看到有很多像是Div、P這種很難定位的Tag,也沒有ID可以使用
但幸好找到了section這個特別的Tag
Sub test1()
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
With myXML
.Open "GET", "http://www.cna.com.tw/news/afe/201805230211-1.aspx", False
.send
myHTML.body.innerHTML = .responseText
End With
Set Section = myHTML.getElementsByTagName("Section")(0)
Debug.Print Section.innerText
Set myXML = Nothing
End Sub
結果發現Section的innertext竟然是空的。。。
試了幾下發現有些Tag的innerText就是抓不到
像是這次範例的Section,還有有些文章會用的Article的Tag
抓不到怎麼辦呢,有兩種做法
第一種是用文字處理的語法,但這個應該會處理到瘋掉
第二種,既然知道內文肯定會有"記者"這兩個字
就可以用這關鍵字來定位,來找出包含此關鍵字的P Tag
找到之後,因為知道P Tag的上一層包含整個內文
所以可以使用parentNode,也就是P的父節點
再使用debug.print 將內文印出來
Sub test2()
Dim XML As Object
Set XML = CreateObject("Microsoft.XMLHTTP")
Dim HTML As Object
Set HTML = CreateObject("HTMLFile")
With XML
.Open "GET", "http://www.cna.com.tw/news/afe/201805230211-1.aspx", False
.send
HTML.body.innerHTML = .responseText
End With
Set section = HTML.getElementsByTagName("p")
For Each p In section
If p.innertext Like "*中央社*" Then
Debug.Print p.ParentNode.innertext
End If
Next
Set myXML = Nothing
End Sub
第三種方式就是借助IE,利用IE來替代
首先開啟一個空白的網頁
再將原始碼輸入進去
但和HTMLFile不同的是,IE可以抓到這個section
Sub test3()
Dim myXML As Object
Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim IE As Object
Set IE = CreateObject("internetExplorer.Application")
With IE
.Visible = False
.navigate "about:blank"
Set doc = .document
End With
With myXML
.Open "GET", "http://www.cna.com.tw/news/afe/201805230211-1.aspx", False
.send
doc.body.innerHTML = .responseText
End With
Set section = doc.getElementsByTagName("Section")(0)
Debug.Print section.innertext
Set myXML = Nothing
Set myIE = Nothing
End Sub
當然,速度還是有差,但不多
自己試的情況是
第二種:0.24秒
第三種:0.57秒
您好 請問針對test1的部分,我用Tagname("a")
回覆刪除然後用for each找到我要的href,
但不知道為什麼.click沒有反應
Dim myXML As Object
回覆刪除Set myXML = CreateObject("Microsoft.XMLHTTP")
Dim myHTML As Object
Set myHTML = CreateObject("HTMLFile")
With myXML
.Open "GET", "URL", False
.send
myHTML.body.innerHTML = .responseText
End With
Set Section = myHTML.getElementsByTagName("a")
'Debug.Print Section.innerText
For Each a In Section
If a.innerText = "the text" Then
a.Click
End If
Debug.Print a.innerText
Next
我想知道一个问题,asp可以直接用这个方法来抓取网页嘛?Set IE = CreateObject("internetExplorer.Application")。然后需要设置什么权限呢?针对I_user
回覆刪除