【问题标题】:Curl grab HTML contentcurl抓取HTML内容
【发布时间】:2009-12-10 14:23:32
【问题描述】:

我有一个需要登录的网页。

我正在使用 curl 构建 HTTP 身份验证请求。它有效,但我无法从我的链接中获取所有内容。我想念所有的图像。

我怎样才能同时抓取图像?

<?php

// create cURL resource
$URL = "http://10.123.22.38/nagios/nagvis/nagvis/index.php?map=Nagvis_CC";
//Initl curl
$ch = curl_init();

//Set HTTP authentication option
curl_setopt($ch, CURLOPT_URL, $URL);  // Load in the destination URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //Normal HTTP request, not SSL
curl_setopt($ch, CURLOPT_USERPWD, "guest:test" ); // Pass the user name and password

// grab URL and pass it to the browser
$content = curl_exec($ch);

$result = curl_getinfo($ch);
// close cURL resource, and free up system resources
curl_close($ch);

echo $content;
echo $result;

?>

我收到此警告消息Warning: curl_error(): 2 is not a valid cURL handle resource in C:\xampp\htdocs\LiveServices\LoginTest.php on line 24

【问题讨论】:

    标签: php curl


    【解决方案1】:

    cURL 不获取图像或任何其他“内容”,它只获取原始 HTML 页面。您是说缺少原始页面上的&lt;img /&gt; 标签吗?

    cURL 也不解析任何 CSS 或 JavaScript,因此如果使用这些修改内容,它将无法通过。例如,您可能无法获取元素的background-image,除非您进行更多抓取,即获取关联的 CSS 文件并对其进行解析。

    【讨论】:

    • 此外,它没有那么优雅,但您也可以使用wget,它可以为您获取图像和所有内容。 curl,从代码来看,对我来说更可靠。
    • 嗨,你有没有在我的情况下做壳 wget 的例子?抓取所有内容
    【解决方案2】:

    我遇到的主要问题是我看不到 html,所以我无法确定问题所在。话虽如此,我想到了两件事。

    首先要检查的是图像是否是相对的。如果它们以 ../xyz/foo.jpgfoo.jpg 的形式显示,那么您需要将图像 src 编辑到完整的 url base tag 添加到 html

    要解析 HTML,请使用 Simple HTML DOM library,因为它比滚动您自己的要快。

    第二个问题可能是图像还需要用户登录。如果是这种情况,您还必须下载所有图像,并在 base 64 编码后将它们嵌入到内容中,或者存储它们暂时在您的服务器上。

    【讨论】:

    • 嗨,Yacoby,我可以将 HTML 发送给你。你能告诉我你的电子邮件地址吗?问候,清
    【解决方案3】:

    这里有一些 html 代码: 我想得到的图像:

    <img id="backgroundImage" style="z-index: 0;" src="/nagios/nagvis/nagvis/images/maps/Nagvis_CC.png"/>
    
    <a href="/nagios/cgi-bin/extinfo.cgi?type=2&host=business_processes&service=NLThirdPartyLive" target="_self">
    

    还有很多 javascript。

    我尝试使用简单的 HTML dom 库,但输出是数组。什么都没有

    require("/simplehtmldom/simple_html_dom.php");
    

    $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, 'WhateverBrowser1.45'); curl_setopt($ch, CURLOPT_URL, 'http://10.123.22.38/nagios/nagvis/nagvis/index.php?map=Nagvis_CC'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); //正常的HTTP请求,不是SSL curl_setopt($ch, CURLOPT_USERPWD, "guest:test" ); // 传递用户名和密码 curl_setopt ($ch, CURLOPT_TIMEOUT, 60); $result = curl_exec($ch);

    $html=str_get_html($result); echo $ret= $html->find('table[class=header_table]');

    回显 $result;

    【讨论】:

      猜你喜欢
      • 2014-01-04
      • 1970-01-01
      • 2015-10-11
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      相关资源
      最近更新 更多