【问题标题】:crawling a html page using php?使用 php 抓取 html 页面?
【发布时间】:2011-04-26 04:19:48
【问题描述】:

This website 在一个列表中列出超过 250 门课程。我想获取每门课程的名称并使用 php 将其插入到我的 mysql 数据库中。课程列表如下:

<td> computer science</td>
<td> media studeies</td>
…

有没有办法在 PHP 中做到这一点,而不是让我做一个疯狂的数据输入噩梦?

【问题讨论】:

  • 除非您需要经常从列表中刷新数据库,否则我建议您只需将页面保存为 html 文件,然后编写一个简单的 jQuery 脚本来获取每个 TD 中的文本并将您在 textarea 或 Firebug 控制台或其他东西中打印出来的 SQL 字符串拼接在一起。
  • 我真的只需要自动建议功能的课程名称,所以是的,我确实考虑过这一点,但我在 jquery 上不是很神,我太笨了,哈哈 :))

标签: php mysql html html-lists web-crawler


【解决方案1】:

如何解析HTML之前已经asked and answered无数次了。虽然(对于您的特定用例)正则表达式可以工作,但通常情况下,use a proper parser 对于此任务来说更好、更可靠。以下是使用DOM 的方法:

$dom = new DOMDocument;
$dom->loadHTMLFile('http://courses.westminster.ac.uk/CourseList.aspx');
foreach($dom->getElementsByTagName('td') as $title) {
    echo $title->nodeValue;
}

对于将inserting the data 导入MySql,您应该使用mysqli 扩展名。 Examples are plentiful on StackOverflow.所以请使用搜索功能。

【讨论】:

    【解决方案2】:

    只是为了好玩,这里有一个快速的 shell 脚本来做同样的事情。

    curl http://courses.westminster.ac.uk/CourseList.aspx \
    | sed '/<td>\(.*\)<\/td>/ { s/.*">\(.*\)<\/a>.*/\1/; b }; d;' \
    | uniq > courses.txt
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题。 这是一个很好的类库,叫做 html dom http://simplehtmldom.sourceforge.net/。 这就像jquery

      【讨论】:

        【解决方案4】:

        正则表达式效果很好。

        $page = // get the page
        $page = preg_split("/\n/", $page);
        for ($text in $page) {
            $matches = array();
            preg_match("/^<td>(.*)<\/td>$/", $text, $matches);
            // insert $matches[1] into the database
        }
        

        请参阅the documentation 了解 preg_match。

        【讨论】:

        • 哦,我喜欢这个,,,这正是我所需要的,但你能详细说明我将如何获取页面!在插入方面,您是否只需将 $matches[1] 插入数据库,或者 deos 它必须更改为 $matches[2] 等..
        • 只需将 $matches[1] 插入数据库即可。它将在循环的每次迭代中更新。获取页面的简单方法是file_get_contents("http://your-url.com/page.html")
        • 是的,我知道,但是对于这样一个他只会使用一次并且他已经知道 HTML 结构的快速而肮脏的工作,正则表达式真的很方便。此外,如果他想要可维护、无错误的代码,他应该远离 PHP....
        • 无论如何,你有权和我一样对 PHP 发表意见。所以让我们同意不同意,因为我已经厌倦了。
        【解决方案5】:

        你可以使用这个HTML解析php库来实现这个:http://simplehtmldom.sourceforge.net/

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 2015-04-05
        • 2011-03-23
        • 2010-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多