【问题标题】:PHP DOM parser breaks the page and can't load page contentPHP DOM 解析器破坏页面,无法加载页面内容
【发布时间】:2015-12-21 09:54:27
【问题描述】:

我创建了一个 php 解析器,它必须在 span 标记中提取价格,但是当我回显 $html 以便查看页面如何加载时,它向我显示了一个没有内容的损坏页面。相反,只有页眉和页脚加载,而不是内容。内容似乎是由 JavaScript 从外部加载的,我的问题是如何使用 Dom 加载 html 页面以便 JavaScript 也加载?我需要让整个内容加载,以便我可以获得 div 和 span。这是我的代码:

<?php

require_once('simple_html_dom.php');

$url = 'http://oldnavy.gap.com/browse/product.do?cid=99570&vid=1&pid=714649002';

$dom = new domDocument('1.0', 'UTF-8');
$html = file_get_html($url);

echo $html;

if(is_object($html)){

    foreach ( $html->find('span#priceText') as $data){

        $raw_price = $data->innertext;

        echo $raw_price;


    }
 }
?>

【问题讨论】:

  • 不要手动使用:simplehtmldom.sourceforge.net/class
  • 但在我的代码中我创建了一个 Dom 对象。或者我没明白你的意思
  • @jewelhuq 你说的不是手动操作是什么意思?
  • 您正在解析数据并逐行编写代码,而不是如果您下载和添加类,您可以使用一两行代码轻松完成。
  • @jewelhuq 但我确实将 Dom 添加到我的代码中。但这不是我的问题。我的问题是带有内容的网页根本不想加载。而是只加载页眉和页脚,但从不加载内容。内容由 JavaScript 外部调用,我的问题是如何使用 Dom 加载 html 页面以便 JavaScript 也加载?

标签: php html dom php-parser


【解决方案1】:

替代方法

您实际上正在寻找的链接(在他的最小表达中)是这样的:http://oldnavy.gap.com/browse/productData.do?pid=714649

现在使用 curl 加载它,给 unknownShopperId cookie 赋值,将它分解成一个数组并得到你需要的价格:

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "http://oldnavy.gap.com/browse/productData.do?pid=714649");
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Cookie: unknownShopperId=E853DA3B2607DDAA5F2FE13CE8D32ACF"));

$result = curl_exec($ch);
$explode = explode(',', $result);

echo 'Original price: ' . $explode[92] . '<br/>' .
'New price: ' . $explode[93] . '<br/>' .
'Both prices: ' . $explode[13];

结果将是:'$14.94'

从现在开始,如果您需要其他价格,您必须知道intem的pid

【讨论】:

  • 哇哦!谢谢!但是你从哪里得到 cookie 的值,这是否意味着 cookie 的这个值将来可能会改变?
  • 您可以随机化该值 AFAIK,如果您的请求缺少它,该站点将尝试为您设置它,以及 301 响应,这将导致 curl 的答案为空。一个固定值似乎一直有效,我将其更改为随机请求,它仍然有效。
  • 非常感谢您的帮助!我还有一个问题,这可能很愚蠢。我不是很喜欢 php,但是 $explode[92], 92 是计算昏迷后的原始价格所在的位置,我想知道是否有办法知道每个数据的位置,或者你必须总是尝试像 1、2、92、93 等数字在猜之前?有技术吗?
  • 我想使用来自oldnavy.gap.com/browse/… 的类似方法收集带有 pid 的链接,但它不起作用。我怎样才能做到这一点?
  • 我周末出去了,它必须一直是相同的数字:92 表示原价,93 表示新价格以防打折等等,两个价格分别为 13空间。
猜你喜欢
  • 2016-09-13
  • 2012-08-19
  • 2014-01-17
  • 2019-12-24
  • 2012-03-20
  • 1970-01-01
  • 2013-12-30
  • 2019-05-19
  • 2021-04-17
相关资源
最近更新 更多