无法使用正则表达式解析网站

时间:2010-11-23 00:23:54

标签: php regex

我正在尝试解析WorldCat.org的搜索结果,以获取有关书籍和文章的基本信息。

可以在此处找到典型的搜索结果(以及我用于测试的搜索结果): http://www.worldcat.org/search?q=ti%3Aorganizations&fq=dt%3Abks&qt=advanced&dblist=638

该页面的html位于:http://pastebin.com/w2U91F1i

这是我正在使用PHP preg_match_all的正则表达式来捕获每个条目的基本细节:

$data = file_get_contents($url);
preg_match_all('/<div class="oclc_number">(.*?)<\/div>\n.*?<div class="name">\n.*?<a href="(.*?)"><strong>(.*?)<\/strong><\/a>\n.*?\n\n<div class="author">by\s(.*?)<\/div><div class="type">.*?<span class=\'itemType\'>(.*?)<\/span>.*?\n.*?<span class="itemLanguage">(.*?)<\/span>.*?<div class="type">Publication:\s*?(.*?)<\/div>/', $data, $topics, PREG_SET_ORDER);

当我将这个表达式与regexr工具(http://gskinner.com/RegExr/)一起使用时,它工作得很好(除了我使用\ r而不是\ n - 通常\ r \ n对我不起作用)。但是preg_match_all每次都给我一个空数组。

关于我做错了什么的线索?

2 个答案:

答案 0 :(得分:3)

每当我需要抓取HTML时,我倾向于使用Simple HTML DOM Parser库,它接受一个HTML树并将其解析为可遍历的PHP对象,您可以查询类似JQuery的内容。

答案 1 :(得分:-1)

HTML不是常规语言,不要尝试使用正则表达式解析它!

在这里阅读第一个答案:

RegEx match open tags except XHTML self-contained tags