【发布时间】:2020-01-07 06:28:26
【问题描述】:
我正在尝试从 tvdb 中分离和处理总季集数。就像我与 show LEGION (https://www.thetvdb.com/series/legion) 一起工作的一个简单示例。此主页将显示该节目有多少季,并且在该行的末尾,有一个徽章指示每个季节的剧集数。我想要一个节目的“绝对数量”剧集,所以我需要将所有这些数字加在一起。这是我能够做到的,但是我想排除“特价”季节剧集编号,这是困难的部分。特别是因为这些元素的内部文本会在指示它所引用的季节之前显示徽章值。
我经历了几个阶段。 首先,我能够获得父标签的内部文本,它给了我一个信息块,说明表中的所有内容如下(似乎有 2 个标签具有相同的类名,这就是为什么我得到双重结果。任何帮助这也将不胜感激)
特价商品 2018 年 4 月 - 2018 年 4 月 8
第 1 季 2017 年 2 月 - 2017 年 3 月 11
第 2 季 2018 年 4 月 - 2018 年 6 月 8
第 3 季 2019 年 6 月 - 2019 年 8 月
四季
1 特价商品 2018 年 4 月 - 2018 年 4 月
8 第1季 2017 年 2 月 - 2017 年 3 月
11 第2季 2018 年 4 月 - 2018 年 6 月
8 第 3 季 2019 年 6 月 - 2019 年 8 月
四季
其次,我能够通过循环遍历父标签中的所有元素,一次隔离一个块,如下所示
1 特价商品 2018 年 4 月 - 2018 年 4 月
第三,我已经到了可以再次循环并仅隔离位于徽章中的数字的阶段(我说徽章,因为它是在 html 代码中引用的方式)
我还回溯并使用了第 2 阶段,并在其中放置了一个正则表达式函数来识别单词“specials”,但无法弄清楚如何跳过它并继续运行 for 循环。
我相信我可能需要与父母、孩子、兄弟姐妹一起编码才能实现我想要的。
提前致谢
Sub()
Dim XML_05 As New MSXML2.XMLHTTP60
Dim HTML_05 As New MSHTML.HTMLDocument
XML_05.Open "GET", "https://www.thetvdb.com/series/legion", False
XML_05.send
HTML_05.body.innerHTML = XML_05.responseText
Dim NETC_05 As MSHTML.IHTMLElementCollection
Dim NET_05 As MSHTML.IHTMLElement
Dim REO_05 As VBScript_RegExp_55.RegExp
Dim MO_05 As Object
Dim SeasonsList As MSHTML.IHTMLElementCollection
Dim SeasonsInfo As MSHTML.IHTMLElement
Dim SI_05 As MSHTML.IHTMLElement
Dim Badge As MSHTML.IHTMLElement
Set SeasonsList = HTML_05.getElementsByClassName("hidden-sm hidden-md hidden-lg")
For Each SeasonsInfo In SeasonsList
Debug.Print SeasonsList.Length
For Each SI_05 In SeasonsInfo.getElementsByTagName("li")
For Each Badge In SI_05.Children
Debug.Print Badge.innerText
Next Badge
Next SI_05
Next SeasonsInfo
End Sub
【问题讨论】:
标签: html vba web-scraping