【问题标题】:Parse a website, getting all the links and save into mysql database解析网站,获取所有链接并保存到 mysql 数据库中
【发布时间】:2014-05-04 18:20:41
【问题描述】:

我正在使用 PHP 和 MySQL 以及 PHP Simple HTML DOM Parser。我必须解析网站的页面并获取一些内容。为此,我将网站主页作为初始 url 并获取该页面上所有可用的锚标记。

我必须过滤这些网址,因为每个链接都对我没有用处。所以,我使用了正则表达式。所需链接必须保存到我的 mysql 数据库中。

我的问题是:

  1. 如果我提取所有链接(大约 1,20,000 个链接)并尝试保存到 mysql 数据库中,我会收到以下错误: 致命错误:第 12 行的 C:\xampp\htdocs\search-engine\index.php 中超过 60 秒的最大执行时间

  2. 我无法将数据存储到数据库中。

  3. 我无法过滤链接。

    include('mysql_connection.php');
    include('simplehtmldom_1_5/simple_html_dom.php');
    $website_name="xyz.html/";
    
    $html=file_get_html("xyz.html/");
    foreach($html->find('div') as $div)
    {
        foreach($html->find('a') as $a_burrp)
        { 
        echo $a1 = $a_burrp->href . '<br>';
            if(preg_match('/.+?event.+/',$a1, $a_match))
            {
                mysql_query("INSERT INTO scrap_urls(url, website_name, date_added) VALUES(`$a1`, `$website_name`, now())";
            }
    
        }
    }
    

【问题讨论】:

  • mysql 已弃用,请使用 mysqli 或 PDO。您的代码容易受到 SQL 注入的攻击。您的“最大执行时间”问题之前已经被问过很多次了。
  • 这是由于我们作为开发人员对服务器信息的了解有限,对于它的竞争对手来说,simpleHTMLDOM 解析器很简单但速度很慢,但由于它对所有 url 的可扩展性和可用性,它被广泛使用.我支持@wachme 回答 PHP 很慢,需要更改
  • 大家好,感谢您的帮助。但是每个人都只解决了我的第一个问题,而不是第二个也是最后一个问题。我不知道将值过滤和存储到数据库中到底有什么问题。请解决这个问题。我会很感激的!

标签: php dom web-crawler


【解决方案1】:

由于 PHP 中的配置限制,您收到 致命错误:最长执行时间为 60 秒。您可以通过在代码顶部添加这样的一行来放大这个数字:

set_time_limit(320);

更多信息:http://www.php.net/manual/en/function.set-time-limit.php

您也可以在 xampp

中放大 php.ini 文件中的数字

【讨论】:

    【解决方案2】:

    实际上,PHP 并不是最好的解决方案。 PHP 脚本旨在执行快速操作并返回响应。在您的情况下,脚本可能会运行很长时间。虽然您可以增加max_execution_time,但我鼓励您使用另一种比标准 PHP 灵活得多的技术,例如 Python 或 JavaScript (Node.js)

    【讨论】:

      【解决方案3】:

      我也/通常使用需要“一些时间”才能完成的 php 脚本。

      我总是将这些脚本作为 cronjob 或直接从 shell 或命令行运行:

      php script.php 参数

      虽然我不必介意处决。 php_execution_time 通常设置为

      问候。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-10
        • 2013-02-22
        • 2017-06-16
        • 1970-01-01
        • 2012-09-26
        • 2010-09-11
        相关资源
        最近更新 更多