当前位置: 首页 > 面试题库 >

刮擦JavaScript生成的网页数据

邓俊材
2023-03-14
问题内容

我的问题是:如何从网站抓取数据,但是直到单击例如“Danhsáchchậm”,该数据才显示。我已经非常认真地尝试,当您单击“Danhsáchchậm”时,这是onclick事件,该事件触发了一些javascript函数js函数之一是从服务器获取数据并将其插入标签/占位符,然后在此时,您可以使用firefox之类的方法检查数据,是的,数据将显示给网页上的用户/查看者。因此,我们又该如何以编程方式废弃此数据?

我编写了一个抓取函数,但是它当然无法获取我想要的数据,因为只有在单击“ Danhsáchchậm”按钮后,该数据才可用

<?php
$Page = file_get_contents('http://vtis.vn/index.aspx');
$dom_document = new DOMDocument();
$dom_document->loadHTML($Page);
$dom_xpath_admin = new DOMXpath($dom_document_admin);
$elements = $dom_xpath->query("*//td[@class='IconMenuColumn']");
foreach ($elements as $element) {
    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
        echo mb_convert_encoding($node->c14n(), 'iso-8859-1', mb_detect_encoding($content, 'UTF-8', true));
    }
}

问题答案:

您需要查看PhantomJS:

PhantomJS是带有JavaScript API的无头WebKit。它具有对各种Web标准的快速本机支持:DOM处理,CSS选择器,JSON,Canvas和SVG。

使用API​​,您可以编写脚本来使“浏览器”与该页面进行交互并抓取所需的数据。然后,您可以使用它来做所需的任何事情。包括在必要时将其传递给PHP脚本。

话虽如此,如果可能的话,请尽量不要“刮擦”数据。如果页面正在执行ajax调用,也许有可以替代的API?如果没有,也许您可​​以说服他们做一个。当然,这比屏幕抓取要容易得多,并且更易于维护。



 类似资料:
  • 你好,我想使用python 3.x和BeautifulSoup从一个带有年龄验证弹出式窗口的网站上刮取数据。如果不点击“是”来表示“你是否超过21岁”,我就无法获得底层的文本和图像。谢谢你的支持。 编辑:谢谢,通过一些注释的帮助,我看到我可以使用cookie,但不确定如何管理/存储/调用请求包中的cookie。 编辑4:取得了一些进展,更新的代码如下。我设法在XML代码中找到了元素,现在我只需要设

  • 试图找出scrapy的工作原理,并使用它在论坛上查找信息。 items.py spider.py 在这个例子中,我试图获取帖子标题的论坛是:https://forum.bodybuilding.nl/fora/supplementen.22/ 然而,我一直没有得到任何结果: 类BodyBuildingSpider(BaseSpider):2017-10-07 00:42:28[scrapy.uti

  • 问题内容: 我的问题是:如何从网抓取数据,但是直到您单击例如“ Danhsáchchậm”,该数据才显示。我已经非常认真地尝试,当您单击“ Danhsáchchậm”时,这是onclick事件,它触发了一些javascript函数js函数之一是从服务器获取数据并将其插入到标签/占位符中,并在这时,您可以使用firefox之类的方法检查数据,是的,数据会在网页上显示给用户/查看者。因此,我们又该如何

  • 问题内容: 我必须在公司的Intranet上刮一个非常非常简单的页面,以使我们的内部流程之一自动化(使函数的输出成功与否)。 我发现以下示例: 来自http://blog.sitescraper.net/2010/06/scraping-javascript-webpages-in- python.html ,它几乎是完美的。我只需要能够提供身份验证即可查看页面。 我一直在浏览PyQt4的文档,但

  • 问题内容: 我已经写了很多刮板,但是我不确定如何处理无限滚动条。如今,大多数网站,Facebook,Pinterest等都有无限滚动条。 问题答案: 您可以使用硒来刮除Twitter或Facebook之类的无限滚动网站。 步骤1:使用pip安装Selenium 第2步:使用下面的代码自动执行无限滚动并提取源代码 步骤3:根据需要打印数据。

  • 问题内容: 我取这个页面与该请求库中的Node.js,并使用解析身体cheerio。 调用已解析的响应正文,发现该页面的title属性为: …什么时候应该: 我尝试将请求库的选项设置为include ,但这似乎并没有改变任何东西。 如何保留这些字符? 问题答案: 该页面似乎是用iso-8859-1编码的。您需要通过传递并使用诸如node- iconv之 类的东西来告诉您退回未编码的缓冲区。 如果要