【问题标题】:Beginner PHP scraping help - getting img src?初学者 PHP 抓取帮助 - 获取 img src?
【发布时间】:2013-04-03 16:14:17
【问题描述】:

我目前正在努力增加我对 PHP 的了解,并且我已经为自己设定了抓取网站并将检索到的数据转换为 JSON 格式的任务。

这是我要解析的数据的示例行:

 <tr>
 <td class="first">
     <img id="ctl00_Content_ctl00_rptInfo_ctl01_Image1" alt="Active" src="../../images/t1.jpg" style="border-width:0px;" />              
 </td>
 <td >
      Copenhagen
 </td>
 <td>
      Sas
 </td>
 <td>
     SK537
 </td>
 <td>
     02 Apr 10:20
 </td>
 <td class="last">
     Delayed 11:30
 </td>
 </tr>

到目前为止,这是我的 PHP 代码:

$raw = file_get_contents($url);

$newlines = array("\t","\n","\r","\x20\x20","\0","\x0B");
$content = str_replace($newlines, "", html_entity_decode($raw));

$start = strpos($content,'<table width="100%" cellspacing="0" cellpadding="0" border="0" summary="Departure times detail information"');

$end = strpos($content,'</table>',$start) + 8;

$table = substr($content,$start,$end-$start);

preg_match_all("|<tr(.*)</tr>|U",$table,$rows);

foreach ($rows[0] as $row){

    if ((strpos($row,'<th')===false)){

        preg_match_all("|<td(.*)</td>|U",$row,$cells);

        $url_src = strip_tags($cells[0][0]);

        $airport = strip_tags($cells[0][1]);

        $airline = strip_tags($cells[0][2]);

            $flightnum = strip_tags($cells[0][3]);

            $schedule = strip_tags($cells[0][4]);

            $status = strip_tags($cells[0][5]);

        echo "{$url_src} - {$aiport} - {$airline} - {$flightnum} - {$schedule} -  {$status}<br>\n";

    }

}

我目前几乎可以正确获取所有值,但我似乎无法为包含此内容的单元格获取任何值:

<td class="first">
     <img id="ctl00_Content_ctl00_rptInfo_ctl01_Image1" alt="Active" src="../../images/t1.jpg" style="border-width:0px;" />              
</td>

谁能帮我解决获取 img 字符串所需的内容,我很高兴能够像这样在 &lt;td&gt;&lt;/td&gt; 中获取整个字符串:

&lt;img id="ctl00_Content_ctl00_rptInfo_ctl01_Image1" alt="Active" src="../../images/t1.jpg" style="border-width:0px;" /&gt;

但如果可以仅解析 src 字符串,那将非常有帮助。

【问题讨论】:

  • 您应该更喜欢一些 html 解析器,例如 querypath.org 。它会让你的生活变得轻松
  • 嗨,Muhammad Haseeb Khan,我打算稍后再看看它们,现在我想在不使用库的情况下让它工作。
  • 不要使用正则表达式解析 html。如果必须避免使用库,请使用 DOM

标签: php preg-match screen-scraping preg-match-all


【解决方案1】:

您的&lt;img&gt; 标记根本没有打开,这就是您的正则表达式无法解析它的原因。

试试:

<td class="first">
     <img id="ctl00_Content_ctl00_rptInfo_ctl01_Image1" alt="Active" src="../../images/t1.jpg" style="border-width:0px;" />              
</td>

【讨论】:

  • 抱歉,这只是我在 HTML 中的问题中的一个编辑错误,正如您发布的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
相关资源
最近更新 更多