使用php抓取html页面?

使用php抓取html页面?,php,mysql,html,html-lists,web-crawler,Php,Mysql,Html,Html Lists,Web Crawler,在一个列表中列出超过250门课程。我想获得每个课程的名称,并使用php将其插入我的mysql数据库。课程如下所示: <td> computer science</td> <td> media studeies</td> … 计算机科学 媒体研究 … 有没有一种方法可以在PHP中实现这一点,而不是让我做一个疯狂的数据输入噩梦?您可以使用这个HTML解析PHP库来实现这一点:http://simplehtmldom.sourceforge.net/

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

<td> computer science</td>
<td> media studeies</td>
…
计算机科学
媒体研究
…

有没有一种方法可以在PHP中实现这一点,而不是让我做一个疯狂的数据输入噩梦?

您可以使用这个HTML解析PHP库来实现这一点:http://simplehtmldom.sourceforge.net/正则表达式工作得很好

$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
}
$page=//获取页面
$page=preg_split(“/\n/”,$page);
对于($text in$page){
$matches=array();
预匹配(“/^(.*)$/”,$text,$matches);
//在数据库中插入$matches[1]
}

有关preg_match,请参阅。

我遇到了相同的问题。 这里有一个很好的类库,叫做HTMLDOM .
这就像jquery一样,只是为了好玩,这里有一个快速的shell脚本来做同样的事情

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

如何解析HTML之前已经有过无数次了。虽然(对于您的特定用例)正则表达式可以工作,但一般来说,更好、更可靠地完成此任务。下面是如何使用:


对于MySql,您应该使用扩展名。因此,请使用搜索功能。

除非您需要经常从列表中刷新数据库,否则我建议您只需将页面保存为html文件,然后编写一个简单的jQuery脚本,从每个TD中提取文本,并将打印成文本的SQL字符串缝合在一起区域或萤火虫控制台或一些东西。我真的只需要课程名称的自动提示功能真的,所以我真的认为,但我不是很神在jQuery,我是如此哑铃LOL:)(相关)哦,我喜欢这个,,,这正是我所需要的,但是你能告诉我如何获得这个页面吗!在插入方面,你是将$matches[1]插入数据库,还是将其更改为$matches[2]等..只需插入$matches[1]它将在循环的每次迭代中更新。获取页面的一个简单方法是
file\u get\u contents(“http://your-url.com/page.html")
。是的,我知道,但对于这样一个快速而肮脏的工作,他只会使用一次,而且他已经知道HTML的结构,正则表达式真的很方便。此外,如果他想要可维护、无错误的代码,他应该远离PHP……无论如何,你和我一样有权对PHP发表意见。所以让我们同意废除它吧e、 '因为我已经厌倦了。建议使用第三方替代方案来代替字符串解析:,和。
$dom = new DOMDocument;
$dom->loadHTMLFile('http://courses.westminster.ac.uk/CourseList.aspx');
foreach($dom->getElementsByTagName('td') as $title) {
    echo $title->nodeValue;
}