2010-10-15 4 views
4

This website перечисляет более 250 курсов в одном списке. Я хочу получить имя каждого курса и вставить его в мою базу данных mysql, используя php. Курсы перечислены так:сканирование html-страницы с использованием php?

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

Есть ли способ сделать это в PHP, вместо меня, имеющий бешеный ввода данных кошмар?

+0

Если вам не нужно обновлять базу данных из списка очень часто, я бы предложил вам просто сохранить страницу в виде html-файла, а затем написать простой сценарий jQuery, который берет текст из каждого TD и сшивает вместе SQL строку, которую вы распечатываете в текстовом поле или в консоли Firebug или что-то в этом роде. – Splashdust

+0

Мне действительно нужно только название курсов для функции autosuggest, поэтому я действительно считаю это, но я не очень бог в jquery, im so dumb lol :)) – getaway

+0

* (related) * [Лучшие методы анализа HTML] (http : //stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

ответ

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.

+0

О, я люблю это ,,, это именно то, что мне нужно, но вы можете элобрать о том, как им получить страницу! с точки зрения вставки, вы просто вставляете $ matches [1] в базу данных или деос, котор нужно изменить на $ matches [2] ect .. – getaway

+0

Просто вставьте $ matches [1] в базу данных. Он будет обновляться каждую итерацию цикла. Простым способом получить страницу является 'file_get_contents (« http://your-url.com/page.html »)'. –

+0

[обязательная ссылка, в которой вы указываете Regex aint для разбора HTML] (http://kore-nordmann.de/blog/0081_parse_html_extract_data_from_html.html) – Gordon

2

Вы можете использовать этот HTML библиотеку синтаксический PHP для достижения этой цели: HTTP: //simplehtmldom.sourceforge.net/

+1

Предлагаемые сторонние альтернативы [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/), которые на самом деле используют [ DOM] (http://php.net/manual/en/book.dom.php) вместо String Parsing: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/manual/en/zend.dom.html), [QueryPath] (http://querypath.org/) и [FluentDom] (http://www.fluentdom.org). – Gordon

0

Просто для удовольствия, вот сценарий быстрой оболочки, чтобы сделать то же самое.

curl http://courses.westminster.ac.uk/CourseList.aspx \ 
| sed '/<td>\(.*\)<\/td>/ { s/.*">\(.*\)<\/a>.*/\1/; b }; d;' \ 
| uniq > courses.txt 
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. поэтому, пожалуйста, используйте функцию поиска.