Этот веб-сайт содержит более 250 курсов в одном списке. Я хочу получить имя каждого курса и вставить его в мою базу данных mysql, используя php. Курсы перечислены следующим образом:
<td> computer science</td> <td> media studeies</td> …
Есть ли способ сделать это на PHP, вместо того, чтобы мне сумасшедший кошмар ввода данных?
Регулярные выражения хорошо работают.
$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.
Вы можете использовать эту библиотеку php для разбора HTML для достижения этой цели: http: //simplehtmldom.sourceforge.net/
Как разобрать HTML- запрос был задан и ответил бесчисленное количество раз. Хотя (для вашего конкретного UseCase) регулярные выражения будут работать, в целом – лучше и надежнее использовать правильный парсер для этой задачи. Ниже описано, как это сделать с DOM :
$dom = new DOMDocument; $dom->loadHTMLFile('http://courses.westminster.ac.uk/CourseList.aspx'); foreach($dom->getElementsByTagName('td') as $title) { echo $title->nodeValue; }
Для вставки данных в MySql вы должны использовать расширение mysqli . В StackOverflow достаточно примеров. поэтому, пожалуйста, используйте функцию поиска.
Я столкнулся с той же проблемой. Вот хорошая библиотека классов, называемая html dom http://simplehtmldom.sourceforge.net/ . Это как jquery
Просто для удовольствия, вот быстрый сценарий оболочки, чтобы сделать то же самое.
curl http://courses.westminster.ac.uk/CourseList.aspx \ | sed '/<td>\(.*\)<\/td>/ { s/.*">\(.*\)<\/a>.*/\1/; b }; d;' \ | uniq > courses.txt