3

私はこのソースからデータを取得しようとしている初心者のプログラマーです

キャプチャしようとしている特定の部分は次のとおりです。

<ul class="ingredient-wrap">

            <li id="liIngredient" data-ingredientid="3914" data-grams="907.2">
                <label>
                    <span class="checkbox-formatted"><input id="cbxIngredient" type="checkbox" name="ctl00$CenterColumnPlaceHolder$recipeTest$recipe$ingredients$rptIngredientsCol1$ctl01$cbxIngredient" /></span>
                    <p class="fl-ing" itemprop="ingredients">
                        <span id="lblIngAmount" class="ingredient-amount">2 pounds</span>
                        <span id="lblIngName" class="ingredient-name">ground beef chuck</span>

                    </p>
                </label>
            </li>

            <li id="liIngredient" data-ingredientid="5838" data-grams="454">
                <label>
                    <span class="checkbox-formatted"><input id="cbxIngredient" type="checkbox" name="ctl00$CenterColumnPlaceHolder$recipeTest$recipe$ingredients$rptIngredientsCol1$ctl02$cbxIngredient" /></span>
                    <p class="fl-ing" itemprop="ingredients">
                        <span id="lblIngAmount" class="ingredient-amount">1 pound</span>
                        <span id="lblIngName" class="ingredient-name">bulk Italian sausage</span>

                    </p>
                </label>
            </li>

            <li id="liIngredient" data-ingredientid="10429" data-grams="1278">
                <label>
                    <span class="checkbox-formatted"><input id="cbxIngredient" type="checkbox" name="ctl00$CenterColumnPlaceHolder$recipeTest$recipe$ingredients$rptIngredientsCol1$ctl03$cbxIngredient" /></span>
                    <p class="fl-ing" itemprop="ingredients">
                        <span id="lblIngAmount" class="ingredient-amount">3 (15 ounce) cans</span>
                        <span id="lblIngName" class="ingredient-name">chili beans, drained</span>

                    </p>
                </label>
            </li>

各 li には 2 セットの単語が含まれています。たとえば、3 (15 オンス) の缶チリビーンズ、水気を切ったもの foreach ループを使用して、各 li から 2 セットの単語を取得し、結合してデータベースに保存しようとしています。 .

これが私のコードです:

foreach($html->find(".ingredient-wrap", 0)->children as $e){
              $ingredients = $e->plaintext;
              echo trim($ingredients);
              $hostname = 'localhost';
              $username = '********';
              $password = '*******';
              $conn = new PDO("mysql:host=$hostname;dbname=*********", $username, $password);
              $sql = ("INSERT INTO ingredients (recipe_id, ingredientname) VALUES (?, ?)");
              $q = $conn->prepare($sql);
              $q->execute(array($recipe_id,$ingredients));
          }

これに関する問題は、データベースに挿入した後、各成分名の値が...であるということです。エコーアウトecho $ingredients."<br/>"すると、後にスペースを含む結合された単語のリストが表示されます。

助けてくれてありがとう!ご不明な点がございましたら、ご不明な点がございましたら、お気軽にお問い合わせください。

4

2 に答える 2

1

「リスト」を取得するのは正常です。->innertext材料を取得するために使用しています。基本的にstriptags()は、成分を含む html で行っているため、生のテキストだけが残ります。各成分タグを個別にループする必要があります。

于 2012-12-24T03:51:12.027 に答える
-1

正規表現を試すことができます...

preg_match_all('/<span id="lblIngAmount" class="ingredient-amount">(.*)<\/span>\s+<span id="lblIngName" class="ingredient-name">(.*)<\/span>/', $ingredients, $matches, PREG_PATTERN_ORDER);

戻り値:

Array
(
[0] => Array
    (
        [0] => <span id="lblIngAmount" class="ingredient-amount">2 pounds</span>
                    <span id="lblIngName" class="ingredient-name">ground beef chuck</span>
        [1] => <span id="lblIngAmount" class="ingredient-amount">1 pound</span>
                    <span id="lblIngName" class="ingredient-name">bulk Italian sausage</span>
        [2] => <span id="lblIngAmount" class="ingredient-amount">3 (15 ounce) cans</span>
                    <span id="lblIngName" class="ingredient-name">chili beans, drained</span>
    )

[1] => Array
    (
        [0] => 2 pounds
        [1] => 1 pound
        [2] => 3 (15 ounce) cans
    )

[2] => Array
    (
        [0] => ground beef chuck
        [1] => bulk Italian sausage
        [2] => chili beans, drained
    )

)

それで:

echo $matches[2][0].": ".$matches[1][0];

あげる:

ground beef chuck: 2 pounds
于 2012-12-24T03:53:30.930 に答える