【问题标题】:Scraping plain text from webpage in php用php从网页中抓取纯文本
【发布时间】:2014-09-05 07:19:43
【问题描述】:

我尝试了大部分的正则表达式。但他们不为我工作.. 我需要删除所有html标签并返回值的正则表达式......在我的html文件中有以下html标签:输入文本,选择。

          $file_string = file_get_contents('page_to_scrape.html');

          preg_match('/<title>(.*)<\/title>/i', $file_string, $title);
          $title_out = $title[1];

          preg_match('/<option value="ELIT">(.*)<\/option>/i', $file_string,   $keywords);
          $keywords_out = $keywords[1];

          preg_match('/<option value="MAS" selected="selected">(.*)<\/option>/i', $file_string, $ash);
          $ash_s = $ash[1];

         preg_match('/<input type="text" value="(.*)"/>/i', $file_string, $description);
         $description_out = $description[1];

         preg_match_all('/<li><a href="(.*)">(.*)<\/a><\/li>/i', $file_string, $links);

        ?>

         <p><strong>Title:</strong> <?php echo $title_out; ?></p>
          <p><strong>Name:</strong> <?php echo $keywords_out; ?></p>
      <p><strong>TExtbox:</strong> <?php echo $description_out; ?></p>
     <p><strong>Event:</strong> <?php echo $ash_s; ?></p>
          <p><strong>Links:</strong> <em>(Name - Link)</em><br />
     <?php
            echo '<ol>';
           for($i = 0; $i < count($links[1]); $i++) {
              echo '<li>' . $links[2][$i] . ' - ' . $links[1][$i] . '</li>';
     }
       echo '</ol>';
        ?>
      </p>

HTML 文件 这是标题

  • 链接 1
  • 链接 2
  • 链接 3
  • 链接 4
  • 链接 5
  •                     </ul>
                        <div class="field">
                                    <label>Event:</label>
                                    <select name="event" class="event">
                                                                <option value="MAS" selected="selected">Same</option>
                                                                    <option value="ELIT">Same4</option>
                                                                    <option value="IPC">Same3</option>
                                                                    <option value="VLMW">Same2</option>
                                                        </select>
                                </div>
    
                                <div class="field">
                                                                <label class="sub">Surname:</label>
                                                    <input name="search[name]" value="Smith" type="text">
                                                    <br>
                                                                            <label class="sub">First Name:</label>
                                                    <input name="search[firstname]" value="Alex" type="text">
                                                    <br>
    
    
    
                                </div>
    
    
                        </div> 
                        </body> 
                        </html> 
    

    【问题讨论】:

    • 你能告诉我们你的尝试吗?
    • 给我们一个简短的 html 页面示例,您希望 php 从中获取什么。
    • 你试过strip_tags
    • 请看我的代码和html文件
    • 为什么不只是 file_get_contents 并以明文形式回显。

    标签: php regex web-scraping


    【解决方案1】:

    您可以使用 DOM 解析器,但为什么不保持简单。 HTML毕竟使用标签。这段代码获取了所有的文本,只有简单的文本和基于数组的函数:

    $html = file_get_contents('http://stackoverflow.com/questions/25680536');
    
    $tags = explode('<',$html);
    
    foreach ($tags as $tag)
    {
      // skip scripts
      if (strpos($tag,'script') !== FALSE) continue;
      // get text
      $text = strip_tags('<'.$tag);
      // only if text present remember
      if (trim($text) != '') $texts[] = $text;
    }
    
    print_r($texts);
    

    它以数组形式结束,这通常比纯文本有用得多。您必须进行更多的后期清洁,但这是不可避免的。

    【讨论】:

    • “文本框值”(您的意思是“输入值属性”)不是纯文本,您的问题最初是关于“纯文本”的。我看到您现在添加了更多详细信息。在这种情况下,使用 DOM 解析器可能是最好的解决方案。
    • 您当然可以自己定义。就此而言,您可能会争辩说 HTML 是用纯文本编写的,那么为什么要这样做呢?不,我明白你想要什么。但是您的方法更加“以浏览器用户为中心”,而作为程序员,您必须更多地考虑程序中事物的含义。无论如何,我会看看其中一个 DOM 解析器,它们必须更好地查找标签并在标签内查找属性。
    • Kiko 软件请建议哪些 DOM 解析器可以帮助我
    • 我对不同的 DOM 库没有足够的经验来给你一个明确的建议。对不起。我不认为你想为此安装一个库,所以忘记那些。 http://simplehtmldom.sourceforge.net 看起来非常简单,并且完全符合您的要求。 DOMDocument 内置于 PHP 中,可以完成这项工作,但如果您不是 OOP(面向对象编程)方面的专家,它可能很难使用。所以,我会尝试 SimpleHTMLDOM 之一。看起来是最好的选择,但我自己没用过。
    猜你喜欢
    • 1970-01-01
    • 2010-09-29
    • 2019-10-06
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多