3

私は、プログラミングの詳細を学ぶために、かなり単純なスクレイプWebサイトを作成し、情報をmysqlデータベースに非公開で保存する初心者プログラマーです。

これが私がスクレイプしようとしているコードです:

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

データをスクレイピングした後、str_replaceを使用して、(最初の例を使用して)2ポンドの牛ひき肉(または2番目の例では1ポンドのバルクイタリアンソーセージ)以外のすべてを取り除こうとしています。

これが私の試みです:

$ingredients = str_replace('#<label>\s<span class="checkbox-formatted"><input id="cbxIngredient" type="checkbox" name=".*?" /></span>\s<p class="fl-ing" itemprop="ingredients">\s#', null, $ingredients);
              echo $ingredients;

理論的には、span id=lblIngAmountパーツのすべてを削除する必要があります。どこが間違っているのですか?str_replaceの前後でテキストは同じままです。どうして?

助けてくれてありがとう!さらに詳しい情報が必要な場合は、喜んでお知らせします。

4

2 に答える 2

2

preg_replace()を使用したいのですが、HTMLを操作するために正規表現を実際に使用するべきではありません。代わりに、PHPのDOMDocumentを使用してください。

于 2012-12-24T02:30:06.323 に答える
2

HTMLの解析に正規表現を使用しないでください。

HTMLを解析する方法を参照してください。

この特定のケースでは正規表現が機能しますが、これは学習プロジェクトであるため、正しく実行する必要があります。

于 2012-12-24T02:37:40.017 に答える