【问题标题】:Web Scraping, data mining, data extraction网页抓取、数据挖掘、数据提取
【发布时间】:2013-11-05 05:24:50
【问题描述】:

我的任务是创建一个网络抓取软件,但我什至不知道从哪里开始。任何帮助都将不胜感激,即使只是告诉我这些数据是如何组织的,或者网站正在使用什么“类型”的数据布局都会有所帮助,因为我可以用谷歌搜索那个词。

http://utilsub.lbs.ubc.ca/ion/default.aspx?dgm=x-pml:/diagrams/ud/Default/7330_FAC-delta_V2.4.1/7330_FAC-delta_V2.4.1-pq.dgm&node=Buildings.Angus_addition&logServerName=QUERYSERVER.UTIL2SUB&logServerHandle=327952

http://utilsub.lbs.ubc.ca/ion/default.aspx?dgm=x-pml:/diagrams/ud/network.dgm&node=Buildings.AERL&unique_id=75660a13-5145-42d5-b661-a50f328306c7&logServerName=QUERYSERVER.UTIL2SUB&logServerHandle=327952

基本上,我需要从这个网站中提取“谐波值”。具体来说,我需要第二个链接上显示的 9 个数字。这些数字不会传递给 HTML,它们似乎每隔几秒钟就会自动更新一次。我需要能够在它们更新时实时提取这些值。即使这是不可能的,我仍然需要证明进行这种网络抓取是不可能的。我没有为任何后端提供任何 API,也不知道他们的站点如何接收数据。

总的来说,任何帮助都将不胜感激,即使它只是一些简单的搜索词,可以让我找到正确的方向。我目前在网络抓取/数据挖掘方面一无所知/

【问题讨论】:

  • “这些数字没有传递给 HTML..”——抱歉,但可以证明不是真的。 “查看源代码”显示实际数字,即使在我的 iPad 上也是如此。您“只”需要找到它们,它们周围有很多 绒毛。如果您想“实时”抓取它们,您可以使用curl 或其他 wget 实用程序发布频繁请求以加载 html,然后寻找包含代码以提取数字。
  • 我建议在网络上搜索“网络抓取”以及您希望/感觉最舒适的编程语言的名称,然后从那里开始尝试。如果那么您无法弄清楚,在此处发布具体问题可能会得到更好的答案。

标签: html parsing screen-scraping data-mining


【解决方案1】:

试试http://code.google.com/p/crawler4j/ 它非常易于使用,您必须重写一个类,即 Controller.java。

您只需要指定种子,它就会为每个抓取的网站返回两个变量中的文本和 HTML 数据。

【讨论】:

    【解决方案2】:

    网页抓取

    从网站解析 HTML 也称为屏幕抓取。这是一个访问外部网站信息(信息必须是公开的——公共数据)并根据需要进行处理的过程。例如,如果我们想从不同网站获取诺基亚 Lumia 1020 的平均评分,我们可以从所有网站中提取评分并在我们的代码中计算平均值。所以我们可以说,作为一个普通的“用户”,你可以拥有作为“公共数据”的东西,你可以使用 HTML Agility Pack 轻松地废弃它。

    试试这些:

    ASP.NETHTMLAgilityPack(开源库)

    Scraping HTML DOM elements using HtmlAgilityPack (HAP) in ASP.NET

    PHP & CURL : WEB SCRAPING WITH PHP & CURL

    Node.jsScreen Scraping with Node.js

    YQL 和 AjaxScreen scraping using YQL and AJAX

    【讨论】:

    • 感谢您的帮助,我尝试使用 YQL 控制台,但它似乎无法获取我需要的实际实时数据。另一个问题是这些方法中的哪一种实际上可以实时获取这些数据?
    • 这可能是您的解决方案:lightstreamer.com,但我不确定。因为我不累。但他们说他们可以实时抓取数据,看到他们的演示,他们似乎真的做到了。
    • 谢谢,我已经下载了他们的软件,现在看,看起来很有希望。我会不断更新。感谢您的帮助!
    【解决方案3】:

    第二个链接每隔几秒从 API 中提取信息。使用谷歌浏览器,您可以使用开发人员工具检查类似的内容,然后单击“网络”。然后,您可以查看发送了哪些请求,并且可以通过右键单击请求 -> 复制为 CURL 轻松复制它们。然后你会得到类似这样的东西,其中包括由 CURL 命令中的请求发送的所有标头和发布数据。这就是第二个链接所调用的内容:

    curl 'http://utilsub.lbs.ubc.ca/ion/default.aspx/GetRTxmlData' -H 'Cookie: ASP.NET_SessionId=oq0qiwuqbb3g3453jvyysvjx' -H 'Origin: http://utilsub.lbs.ubc.ca' -H 'Accept-Encoding: gzip,deflate,sdch' -H 'Host: utilsub.lbs.ubc.ca' -H 'Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36' -H 'Content-Type: application/json; charset=UTF-8' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Referer: http://utilsub.lbs.ubc.ca/ion/default.aspx?dgm=x-pml:/diagrams/ud/network.dgm&node=Buildings.AERL&unique_id=75660a13-5145-42d5-b661-a50f328306c7&logServerName=QUERYSERVER.UTIL2SUB&logServerHandle=327952' -H 'X-Requested-With: XMLHttpRequest' -H 'Connection: keep-alive' --data-binary $'{\'dgm\':\'x-pml:/diagrams/ud/network.dgm\',\'id\':\'75660a13-5145-42d5-b661-a50f328306c7\',\'node\':\'\'}' --compressed
    

    API 返回包装在 JSON 中的 XML。

    您可能想像 codeSpy 所说的那样将 CURL 与 PHP 一起使用,您只需设置所有标头并发布数据并正确复制请求,否则 API 不会响应您的请求。

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 2021-10-15
      • 2021-12-28
      • 1970-01-01
      • 2011-02-07
      相关资源
      最近更新 更多