【问题标题】:How to shake off duplicate links while parsing web-data?如何在解析网络数据时摆脱重复链接?
【发布时间】:2018-01-01 19:47:05
【问题描述】:

我在 vba 中编写了一些脚本来解析从 torrent 站点指向下一页的链接。我的脚本能够刮掉它们。但是,我面临的问题是结果中出现了几个重复的链接。我的问题是是否有任何技术可以只解析唯一链接?

Sub TorrentData()
    Dim http As New XMLHTTP60, html As New HTMLDocument, post As Object

    With http
        .Open "GET", "https://yts.ag/browse-movies", False
        .send
        html.body.innerHTML = .responseText
    End With

    For Each post In html.getElementsByClassName("tsc_pagination")(0).getElementsByTagName("a")
        If InStr(post, "page") > 0 Then
           x = x + 1: Cells(x, 1) = post.href
        End If
    Next post
End Sub

抓取链接的部分图片:

在继续之前请务必检查链接: "https://www.dropbox.com/s/647x3m65u90a1bu/Description1.txt?dl=0"

【问题讨论】:

  • 我首先想到的是您可以将链接添加到字典中。在获取输出之前,检查它们是否存在。
  • 感谢 Tehscript 的评论。我对字典的用法不太熟悉。我确实找到了解决方法,但这不是我想要的。将在我的帖子中粘贴一个链接。
  • 嗨 Tehscript,维护您的建议我尝试在我的脚本中使用字典,它给了我完美的结果。但是问题是我无法重新排列我的脚本以提供更好的外观。这是 FYC 的链接:“dropbox.com/s/n3668q9da9u8qr4/…
  • 您不必循环两次。当您检查它是否存在于字典中时,您可以将链接添加到字典并同时将其写入单元格。
  • 这是我从浅见中所能想到的最好的“dropbox.com/s/n3668q9da9u8qr4/…

标签: vba web-scraping web-crawler


【解决方案1】:

我无法使网站正常工作。无论如何,使用字典消除重复并写入同一循环内的单元格的正确方法应该如下所示:

For Each Post In html.getElementsByClassName("tsc_pagination")(0).getElementsByTagName("a")
    If InStr(Post.href, "page") > 0 Then
        If Not dict.Exists(Post.href) Then
            dict.Add Post.href, "whatever information you would like to store"
            x = x + 1
            Cells(x, 1) = Post.href
        End If
    End If
Next Post

【讨论】:

  • 感谢 Tehscript。它像你说的那样工作。顺便说一句,是否有必要保留这部分“,”你想存储的任何信息“”。我试图取出但有错误。再次感谢。
  • 呵呵。字典由键和值组成。演示dict = {"numberofapples":30,"yourname":"SMth80","yourparsedwebsite":"https://yts.ag/browse-movies"}。在上面的例子中,你的键持有post.href,你可以给这个键赋值。可能是x,也可能是来自网站的与post.href 相关的其他信息,或者您可以将其设置为任何常量值,例如1"Hello""whatever information you would like to store"
  • 只要你把它设置成什么就可以了,因为一个键必须有一个值。问题是,你以后会使用这个值吗?目前,您感兴趣的部分是Key,而不是Value。但稍后在您的代码中,您可能希望从相应的Key 中提取Value。我希望它有所帮助。
  • 感谢您的澄清。
  • 嗨,Tehscript!闲暇之余,请点击链接“stackoverflow.com/questions/45362363/…
猜你喜欢
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 2017-07-09
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
相关资源
最近更新 更多