【问题标题】:How to get price value with regular expressions如何使用正则表达式获取价格值
【发布时间】:2021-06-27 05:38:20
【问题描述】:

我正在尝试为在线商店编写爬虫,现在我需要获取网页的价格值。这是我的尝试:

$match = "";
$isMatched = preg_match('|<div class="c-product__seller-price-pure js-price-value".*\$(.*)<|',$html,$match);
echo "<pre>";
print_r($match);
echo "</pre>";

基本上$html保存网页的源代码,价格值存储在文档中,如下所示:

&lt;div class="c-product__seller-price-pure js-price-value"&gt;10,699,000&lt;/div&gt;

但是当我运行它时,我得到了这个结果:

Array
(
)

也就是说,我使用的正则表达式不正确:

|&lt;div class="c-product__seller-price-pure js-price-value".*\$(.*)&lt;|

那么我怎样才能用正则表达式正确地得到这个价格值呢?

【问题讨论】:

  • 嗨 tejoslaeslio。我注意到您正在为每个问题添加复制+粘贴请求消息。请不要这样做——这会给志愿编辑带来很多工作。将 Stack Overflow 更像是文档,而不是聊天室,这可能会对您有所帮助。

标签: php regex web-scraping web-crawler


【解决方案1】:

您目前正在将 js-price-value" 之后的任何字符 .* 与美元符号 `$ 匹配。但您的源 HTML 中没有美元符号。

删除$ 符号并匹配标记的开始和结束之间的任何内容。

最简单的方法是使用 NOT 运算符^,匹配任何不是&lt; 符号的字符,例如([^&lt;]+)

完整代码如下:

$match = "";
$isMatched = preg_match('|c-product__seller-price-pure js-price-value">([^<]+)|', $html, $match);
echo "<pre>";
print_r($match);
echo "</pre>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多