2016-03-03 3 views
0

Я хочу извлечь содержимое страницы с именем атрибута itemprop. Предположим, у меня есть страница, которая имеет различные HTML-теги, которые имеют атрибут с именем itemprop поэтому я хочу, текст между этими тегами,Найти контент между тегами HTML, используя RegEx

Для заголовка:

<h1 itemprop="name" class="h2">Whirlpool Direct Drive Washer Motor Coupling</h1> 

Таблица данных из тд тэгом:

<td itemprop="productID">AP3963893</td> 

Здесь общий атрибут itemprop. Поэтому мне нужны данные между этими тегами, например Whirlpool Direct Drive Washer Motor Coupling и AP3963893 с использованием regexp.

Ниже мой код (который в настоящее время не работает)

preg_match_all(
    '/<div class=\"pdct\-inf\">(.*?)<\/div>/s', 
    $producturl, 
    $posts  
); 

Мой код:

<?php 
    define('CSV_PATH','csvfiles/'); 
    $csv_file = CSV_PATH . "producturl.csv"; // Name of your producturl file 
    $csvfile = fopen($csv_file, 'r'); 
    $csv_fileoutput = CSV_PATH . "productscraping.csv"; // Name of your product page data file 
    $csvfileoutput = fopen($csv_fileoutput, 'a'); 

    $websitename = "http://www.appliancepartspros.com"; 

    while($data = fgetcsv($csvfile)) 
    { 
     $producturl = $websitename . trim($data[1]); 

     preg_match_all(
      '/<.*itemprop=\".*\".*>(.*?)<\/.*>/s', 
      $producturl, 
      $posts  
     ); 
     print_r($posts); 
    } 

ответ

1

Во-первых, never ever use RegEx to parse HTML. Во-вторых, вы можете достичь этого с помощью JQuery довольно просто, используя селектор атрибута:

var nameItemprop = $('[itemprop="name"]').text(); // = 'Whirlpool Direct Drive Washer Motor Coupling' 
var productIdItemprop = $('[itemprop="productID"]').text(); // = 'AP3963893' 

Однако обратите внимание, что он является недействительным HTML, чтобы создавать свои собственные нестандартные атрибуты. Вы должны быть в идеале, используя data-* атрибуты содержат данные, связанные с этими элементами:

<h1 data-itemprop="name" class="h2">Whirlpool Direct Drive Washer Motor Coupling</h1> 
<td data-itemprop="productID">AP3963893</td> 
var nameItemprop = $('[data-itemprop="name"]').text(); 
var productIdItemprop = $('[data-itemprop="productID"]').text(); 

Наконец, следует ли когда-нибудь несколько элементов с одинаковым атрибутом itemprop, то вам нужно будет перебрать их, чтобы получить значение от каждого отдельного элемента.

+0

Не могли бы вы предложить мне пример php с помощью regexp, потому что есть много URL-адреса продукта, который хранится в csv-файле. – Steve

+0

Извините, я не знаю PHP. Когда вы отметили jQuery, я использовал это. –

+0

Обновленный мой вопрос с моим кодом .. Пожалуйста, смотрите – Steve

0

Как уже упоминалось, вы не должны использовать RegExp для разбора HTML, но если вы настаиваете на это делать, вот образец, который должен работать:

$producturl = '<h1 itemprop="name" class="h2">Whirlpool Direct Drive Washer Motor Coupling</h1>'; 

if (preg_match_all(
    '/<.*itemprop=\".*\".*>(.*?)<\/.*>/s', 
    $producturl, 
    $posts  
)) { 
    print_r($posts); 
} 

Это создает следующий вывод:

Array 
(
    [0] => Array 
     (
      [0] => <h1 itemprop="name" class="h2">Whirlpool Direct Drive Washer Motor Coupling</h1> 
     ) 
    [1] => Array 
     (
      [0] => Whirlpool Direct Drive Washer Motor Coupling 
     ) 
) 
+0

Он возвращает пустой массив. Я обновил свой код в вопросе .. Пожалуйста, смотрите. – Steve

+0

Я добавил полный пример, чтобы вы могли копировать, вставлять и выполнять его. Это работает для меня .. – Remo

+0

вы передаете содержимое html переменной producturl, но в моем случае это абсолютный URL .. – Steve

Смежные вопросы