使用php抓取一个html页面?

时间:2010-10-15 22:09:40

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

This website在一个列表中列出了250多个课程。我想得到每个课程的名称,并使用PHP将其插入我的mysql数据库。课程列表如下:

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

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

5 个答案:

答案 0 :(得分: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
}

有关preg_match的信息,请参阅the documentation

答案 1 :(得分:2)

您可以使用此HTML解析php库来实现此目的:http://simplehtmldom.sourceforge.net/

答案 2 :(得分:2)

如何解析HTML已经无数次asked and answered了。虽然(针对您的特定UseCase)正则表达式将起作用,但对于此任务,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.所以请使用搜索功能。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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