сканировать HTML-страницы с помощью php? - PullRequest
4 голосов
/ 16 октября 2010

На этом сайте перечислены более 250 курсов в одном списке.Я хочу получить название каждого курса и вставить его в мою базу данных mysql, используя php.Курсы перечислены так:

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

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

Ответы [ 5 ]

4 голосов
/ 16 октября 2010

Регулярные выражения работают хорошо.

$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.

2 голосов
/ 18 октября 2010

Как анализировать 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 много. , поэтому, пожалуйста, используйте функцию поиска.

2 голосов
/ 16 октября 2010

Вы можете использовать эту библиотеку php для разбора HTML, чтобы добиться этого: http://simplehtmldom.sourceforge.net/

0 голосов
/ 16 октября 2010

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

curl http://courses.westminster.ac.uk/CourseList.aspx \
| sed '/<td>\(.*\)<\/td>/ { s/.*">\(.*\)<\/a>.*/\1/; b }; d;' \
| uniq > courses.txt
0 голосов
/ 16 октября 2010

Я столкнулся с той же проблемой.Вот хорошая библиотека классов под названием html dom http://simplehtmldom.sourceforge.net/. Это как jquery

...