php - 如果没有元描述,我如何使用 p 标签的 20 个字符

标签 php

是的,我已经构建了一个网络爬虫。它扫描链接、标题和元描述。它扫描链接并将它们保存在 $link 中。它扫描链接的标题并将它们保存在 newArray 的 [title] 中。现在在这个数组中,我想让它知道如果没有元标签,它可以扫描第一个 p 标签并使用它。唯一的问题是它似乎根本没有保存任何信息。

function getMetas($link) {
$str1 = file_get_contents($link);    

    if (strlen($str1)>0) {
 preg_match_all( '/<meta.*?name=("|\')description("|\').*?content=("|\')(.*?)("|\')/i', $str1, $description);
   if (count($description) > 1) {
    return $description[4];   
   }


   }
 return '';
   if ($description == '') {
$html = file_get_contents($link);    
preg_match('%(<p[^>]*>.*?</p>)%i', $html, $re);
$res = get_custom_excerpt($re[1]);
echo "\n";
echo $res;
echo "\n";

}

    function get_custom_excerpt($return, $option = 30, $sentance = false) {
    $marks = Array(".","!","?");

   $return = strip_tags($return);

  if($sentance == true) {
$start = implode(" ", array_slice(preg_split("/\s+/", $return), 0, $option ));
$start .= ' ';
$end = implode(" ", array_slice(preg_split("/\s+/", $return), $option));

$cut = Array();
foreach($marks AS $m => $mark){
  $mark = strpos($end, $mark);
  if($mark != false) $cut[$m] = $mark;
}

if($cut[0] != "")
  $chop = min($cut);
    else
      $chop = $option;
$rest = substr($end, 0, $chop);

$key = array_search($chop, $cut);

$return = $start.$rest;

   }else{
$return = implode(" ", array_slice(preg_split("/\s+/", $return), 0, $option));
   }
  $return .= $marks[$key];

  return $return; 
   }  

   }


 $output = Array();

 foreach ($links as $thisLink) {
 $output[] = array("link" => $thisLink, "title" => Titles($thisLink), "description" => getMetas($thisLink), getMetas($res));
 } 
  print_r($output);

最佳答案

您的正则表达式可能不起作用。属性可能不是您想要的顺序。 可能是 <meta name="" content=""><meta content="" name=""> .

为什么不使用 XML 解析器? 大多数 HTML 都足够有效,可以用于解析。

请看PHP Parse HTML code

关于php - 如果没有元描述,我如何使用 p 标签的 20 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560417/

相关文章:

php - 如何修复通知: Undefined index in PDO

php - preg_split 有两种模式(其中一种被引用)

php - 如何在php中创建父子关系

php - 是否可以向对一个域源具有 CORS 限制的端点发出 Guzzle 请求?

php - Laravel:如何仅在日期存在时验证日期?

php - 500内部服务器错误?

php - Laravel Dusk:Facebook\WebDriver\Exception\UnknownErrorException:未知错误:net::ERR_CONNECTION_REFUSED

php - 隐藏其中没有任何产品的 WooCommerce 类别?

php - 在同一页面上的 php 和 javascript 之间共享数据

PHP ctype_digit 安全性