【问题标题】:Web scraping URL contains </a> end tag at the end how to remove网页抓取 URL 末尾包含 </a> 结束标记如何删除
【发布时间】:2017-11-21 10:45:49
【问题描述】:

所以我有这段代码来解析来自网站的 url 链接,但它在 url 的末尾包含和 &lt;/a&gt; 结束标记,就像这样 http://www2.enekoshop.jp/shop/tadaseinikuten/&lt;/a&gt;

$html = new simple_html_dom();
$html->load($xml->retdata);

$item = array();

foreach($html->find('body') as $home) {
    //some other fields here
    $email1 = preg_replace('/[^\00-\255]+/u','',trim($home->find('div[id="home"] div[id="mainblock"] div[class="txtblock"]', 8)->children(1)->plaintext));

    $email = filter_var($email1, FILTER_SANITIZE_EMAIL);

    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
        $item['email'] = $email;
    } else {
        $item['email'] = NULL;
    }
}

虽然我使用plaintext 来抓取文本,但它有&lt;/a&gt; 结束标记。如何删除它?

【问题讨论】:

  • Ehh 我很困惑,你将域放入一个名为$email 的变量中,然后在其上调用filter_var(..., FILTER_SANITIZE_EMAIL);
  • 如果&lt;/a&gt; 标签始终存在,为什么不使用子字符串函数呢? substr($url, 0, strlen($url) - 4);
  • @Paul-Etienne 这并没有真正解决问题,而是解决了症状。
  • $html是什么对象?
  • @Xatenev 它实际上来自 codeigniter 中的一个库。我将完成代码。

标签: php html regex parsing


【解决方案1】:

稍微扩展你的preg_replace() 模式怎么样?

旧模式:/[^\00-\255]+/u

新模式:~[^\00-\255]+|&lt;/a&gt;$~u

Pattern & Replace Demo Link

我只是更改您的模式分隔符以避免转义 &lt;/a&gt; 中的正斜杠并添加“替代”(| = 'or')以匹配 &lt;/a&gt; 仅在字符串末尾使用 @ 987654328@锚。

$email1 = preg_replace('~[^\00-\255]+|</a>$~u','',trim($home->find('div[id="home"] div[id="mainblock"] div[class="txtblock"]', 8)->children(1)->plaintext));

【讨论】:

    猜你喜欢
    • 2018-04-09
    • 1970-01-01
    • 2019-06-14
    • 2016-04-13
    • 2019-11-18
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2021-09-07
    相关资源
    最近更新 更多