【问题标题】:Web Scraping: innertext网页抓取:innertext
【发布时间】:2020-08-16 03:46:14
【问题描述】:

我想了解特定地区的房地产价格概览。
我创建了将价格转移到列表中并进行统计的代码。
我的程序从特定链接中抓取价格、区域等。

在下一步中,我想通过 VBA 自动创建此链接列表。
对于这一步,我需要将暴露 ID 提取到 Excel。

Option Explicit

Sub ExposeID()
Dim browser As Object   'Aufnehmen der verwendeten Instanz des Browsers (Internet Explorer)
Dim knotenAst As Object 'Aufnehmen einer HTML Struktur aus dem Browser Dokument
Dim url As String       'Aufnehmen der auszulesenden Adresse
Dim ExposeID As String

url = "https://www.examplexyz.de"
Set browser = CreateObject("internetexplorer.application")
browser.Visible = False
browser.navigate url
Do Until browser.readyState = 4: DoEvents: Loop

Set knotenAst = browser.document.getElementsByClassName("is24-res-list is24-res-gallery result-list border-top")(0).getElementsBytagName("li")

'ExposeID
 If Not knotenAst Is Nothing Then
 ExposeID = Trim(knotenAst.innerText)
    
 Else
 ExposeID = "KeinWert"
 End If
 MsgBox ExposeID, vbOKCancel

'Aufräumen
browser.Quit
Set browser = Nothing
Set knotenAst = Nothing

End Sub

预期结果:所有exposeID的列表。

实际结果:我得到了一个转储。

屏幕截图:来自主页的 HTML(标记以黄色突出显示)

我的清单图片:
[![Excel 中的结果][2]][2]

【问题讨论】:

  • knotenAst 是一个集合。它没有 innerText 属性。
  • 你真的想要所有的exposeIds吗?
  • @QHarr:感谢您的回答。是的,获取所有公开 ID 很重要。 LINK 包含一个特殊区域的房屋列表。
    如果我有 ExposeID 列表,我可以选择请求的信息,例如价格,例如从相应的详细信息页面。

标签: excel vba web-scraping getelementsbytagname


【解决方案1】:

您应该能够结合使用类和属性 css 选择器

Dim nodeList As Object, i As Long

Set nodeList = browser.document.querySelectorAll(".result-list__listing[data-id]")

For i = 0 To nodeList.Length - 1 

    Debug.Print nodeList.item(i).getAttribute("data-id")

Next

【讨论】:

  • data-id 在页面源代码中可用,但 xhr 似乎无法获取它们。
  • 啊...我无法再运行 vba。 @SIM。这些值是否实际存在于响应中?我可以使用 python 中的任何解析器进行检索,但请注意 html 源代码中有很多错误。其中一些可能会抛出 vba 解析器。 Java + css 被抛弃了。另外,应该测试用户代理。
  • 在使用 palm--shortlist-container.*?data-id="(\d+)" 的正则表达式时,我只看到 20 个 id 中的 18 个(我知道!!!) i> 关于解析器失败的 java 响应。缺失是'10963818','117607563',但目前是'109663818','115530390','11693645','116969227','77274945','117160707','117160707','114991665','1144712​​56','1144712​​56','1144712​​56'117607563 ', '117882741', '115027075', '115027063', '117879476', '117370369', '117013902', '116790376', '116763107', '113800677', '11482'
  • 我试图在http.responseText 中找到ID,但我看到的是很多脚本标签和东西,所以我想知道你如何使用正则表达式来获取它们。你说的是在 vba 中做正则表达式,对吧?
  • 我正在使用 java,因为我无法再运行 vba。与 java 相同的问题与解析器失败但响应中有 id。
【解决方案2】:

我知道这真的非常原始,与 QHarr 一直在这里抛出的东西相比,但它可能已经足够开始了。

Sub DumpData()

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True

URL = "https://www.immobilienscout24.de/Suche/de/niedersachsen/oldenburg-oldenburg/haus-kaufen?pagenumber=1"

'Wait for site to fully load
IE.Navigate2 URL
Do While IE.Busy = True
   DoEvents
Loop

RowCount = 2

With Sheets("Sheet1")
   .Cells.ClearContents
   For Each itm In IE.document.all
      If itm.ID Like "*result-*" Then
        .Range("B" & RowCount) = itm.ID
        RowCount = RowCount + 1
      End If
   Next itm
End With
End Sub

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-01
    • 2020-06-18
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多