3

我是一名初学者程序员,制作了一个相当简单的抓取网站,并将信息私下存储在 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 磅碎牛肉(或第二个示例中的 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 回答