【发布时间】:2025-12-30 22:20:08
【问题描述】:
我正在尝试创建一个宏来从网页中获取一些内容并以自定义方式将其写入 excel 文件中。我使用了来自同一个网站的两个相同的链接。这是其中的one。我对Name、Recipe 和Ingredients 三个字段感兴趣。
我创建的脚本可以相应地解析数据。但是,我想将它们排列在 this 之类的 excel 文件中。
到目前为止我已经写了(工作完美):
Sub GetAndArrangeData()
Dim HTML As New HTMLDocument, oPost As Object
Dim HTMLDoc As New HTMLDocument, ws As Worksheet
Dim oTitle As Object, oPosts As Object
Dim linklist As Variant, url As Variant
linklist = Array( _
"https://www.chelseasmessyapron.com/avocado-chicken-salad-2/", _
"https://www.chelseasmessyapron.com/caprese-quinoa-salad/" _
)
Set ws = ThisWorkbook.Worksheets("Sheet1")
For Each url In linklist
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", url, False
.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36"
.send
HTML.body.innerHTML = .responseText
End With
Set oTitle = HTML.querySelector("h1.entry-title")
Debug.Print oTitle.innerText
Set oPost = HTML.querySelectorAll(".cma-recipe-nutrition > .wprm-nutrition-label-container > span[class*='nutrition-container']")
For I = 0 To oPost.Length - 1
HTMLDoc.body.innerHTML = oPost(I).outerHTML
Debug.Print HTMLDoc.querySelector("span.wprm-nutrition-label-text-nutrition-label").innerText
Debug.Print HTMLDoc.querySelector("span[class*='nutrition-value']").innerText
Next I
Set oPosts = HTML.querySelectorAll(".wprm-recipe-block-container")
For I = 0 To oPosts.Length - 1
HTMLDoc.body.innerHTML = oPosts(I).outerHTML
On Error Resume Next
Debug.Print HTMLDoc.querySelector("span.wprm-recipe-details-label").innerText
Debug.Print HTMLDoc.querySelector("span.wprm-recipe-details").innerText
On Error GoTo 0
Next I
Next url
End Sub
如何按照上图所示的方式将数据写入 excel 文件?
顺便说一句,这是我在即时窗口中得到的结果:
Avocado Chicken Salad
Calories:
542
Carbohydrates:
30
Protein:
11
Fat:
45
Saturated Fat:
7
Cholesterol:
16
Sodium:
285
Potassium:
687
Fiber:
8
Sugar:
9
Vitamin A:
945
Vitamin C:
19
Calcium:
36
Iron:
1
Course
Cuisine
Keyword
Prep Time
20
Cook Time
15
Total Time
35
Servings
2
Calories
542
Cost
$6.82
Caprese Quinoa Salad
Calories:
375
Carbohydrates:
30
Protein:
11
Fat:
26
Saturated Fat:
4
Cholesterol:
7
Sodium:
73
Potassium:
996
Fiber:
9
Sugar:
7
Vitamin A:
17616
Vitamin C:
32
Calcium:
168
Iron:
4
Course
Cuisine
Keyword
Prep Time
35
Cook Time
25
Chilling Time (Quinoa)
1
Total Time
2
Servings
6
Calories
375
Cost
$6.84
【问题讨论】:
-
“完美工作”是什么意思?我尝试对其进行测试,两行都试图定义
oPosts对象,返回'Null. I meanSet oPosts = ...`。需要注册吗? -
查看我在执行宏@FaneDuru 时在即时窗口中得到的输出。不,不需要任何东西来获取结果。只需按原样运行即可。谢谢。
-
我照原样复制它,只尝试运行。它返回一个正确的.
responseText,正确的oTitle.innerText,但它总是以Null的形式返回Set oPost = HTML.querySelectorAll(".......没有oPost.Length,也没有任何迭代。如果我能获得您显示的“结果”(在即时窗口中),我可以向您展示如何根据需要将其安排在表格中。 -
您真的想要关键字、课程和美食吗?
-
不。我真的想把他们踢出去@QHarr。
标签: excel vba web-scraping