【问题标题】:Webcrawler extract link elementsWebcrawler 提取链接元素
【发布时间】:2018-12-10 02:57:19
【问题描述】:

我想从网页中提取元素。

$html = file_get_contents($link);

那个函数返回完整的html文件,我只希望内部和外部链接保存在数据库中。

$sql = "INSERT INTO prueba (link, title, description) VALUES (?, ?, ?)";

//preparando los datos
$query = $pdo->prepare($sql);

//orden de ejecucion
$result = $query->execute([
  $link,
  $title_out,
  $description
]);

在这里,我已经设法提取描述和标题,并设法将它们放入数据库中,但我想提取所有外部和内部链接。一列中的内部链接和另一列中的外部链接。我已经在数据库中创建了两列。

【问题讨论】:

    标签: php web-crawler php-7.2


    【解决方案1】:

    我建议使用 DOM-Parser 库,例如:

    解析 HTML 并仅“查询”所有锚点(a 标记)。

    比尝试自己使用正则表达式提取它们更不容易出错。

    【讨论】:

    • 我认为我不应该为这么短的工作使用完整的库。但是,我更感兴趣的是了解如何分离内部和外部链接。因为网络爬虫必须通过外部链接才能到达其他页面并能够爬取这些页面。
    【解决方案2】:

    HTML 抓取

    为此,我建议您使用提供帮助功能的开源库来导航到 DOM。没有这个,你将不得不维护更多的代码。如果您想管理对多个页面的报废,则必须在每次更新页面时更新您的正则表达式查询。

    你不想要那个^^'

    Goutte”库中的一个示例(我希望你在 +PHP 5.5 中)

    $links = [];
    $crawler->filter('a')->each(function ($node) {
        var_dump($node->attr('href'));
        $links[] = $node->attr('href');
    });
    

    $links 现在包含页面中的所有链接属性

    有关节点旅行的更多示例,请参阅this link

    使用您的数据库逻辑来持久化这些数据

    如果 Goutte 的代码有错误,我很抱歉,我不经常使用它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      相关资源
      最近更新 更多