Ankündigung

Einklappen
Keine Ankündigung bisher.

modifizierer Abfrage URl

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • modifizierer Abfrage URl

    Hallo,

    ich komm nicht auf die Lösung. Ich möchte gerne mehrere Tags (p, li, H1-h6, td usw.) über eine modifiers RegEx abfrage auslesen. Das heißt, ich gebe eine URL ein, das Script sucht die Tags und gibt die Inhalte aus. Funktioniert alles schon schön. Das Problem.. ich kann nur h1 - h6 (<h([1-6])>(.*?)</h\1>) auslesen oder nur p Tags oder nur li Tags. Ich würde aber gerne alles Inhalte von p, td, li, ul, h1-h6 aulesen und ausgeben. Am besten einfach den kompletten Hauptinhalt (keine scripts oder Metadaten). Hat hier jemand einen passenden Code oder weiß wie man den zusammenbaut. Ihr würdet mir mega helfen bin am verzweifeln und im Netz find ich nix passendes.

    Lg Daniel

  • #2
    Erklären dauert länger als zeigen, daher hier der Code

    PHP-Code:
    $html file_get_contents('https://www.php.de/forum/webentwicklung/php-einsteiger/1524183-modifizierer-abfrage-url');

    $extract =  strstr$html'<div class="js-post__content-text');
    $pos_closing_tag strpos($extract'</div' );  
    $extract substr($extract0,$pos_closing_tag);

    // Ausgabe
    echo '<pre>';
    echo 
    $extract;
    echo 
    '</pre>'

    Kommentar


    • #3
      Was spricht gegen DOMDocument/DOMXPath?
      Competence-Center -> Enjoy the Informatrix
      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

      Kommentar


      • #4
        Zitat von Arne Drews Beitrag anzeigen
        Was spricht gegen DOMDocument/DOMXPath?
        Nichts spricht dagegen, Aber er will ja den gesamten textuellen Inhalt, ohne Tags, wahrscheinlich alles zwischen Body auslesen und da ist meine Methode einfacher.

        Kommentar


        • #5
          Vielen Dank schonmal. Problem ist jetzt das mir die Scripte etc auch ausgegben werden. Eine bestimmte Klasse oder ID kann ich nicht abfragen, das muss individuell sein. Ich brauch also im Body nur den Text. Also entweder ich lese jeden Tag einzeln aus oder ich schließe Script etc aus. Gibts da ne Möglichkeit?

          Kommentar


          • #6
            PHP-Code:
            $oDom = new DOMDocument;
            $oDom->loadHTMLFile'http://www.example.com' );
            $oXPath = new DOMXPath$oDom );

            var_dump$oXPath->query'//body' )->item(0)->nodeValue ); 
            Erkenne keinen Nachteil gegenüber der RegEx, im Gegenteil...
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Klappt leider auch nicht so wie ich mir das Vorstelle. Wird auch alles zwischen dem Body ausgegeben auch das Script von Jquery z.B.

              Kommentar


              • #8
                Ja, mit DOMDocument kannst Du die Tags zuvor komplett verwerfen, bevor Du Dir den PlainText ziehst.
                Dazu musst Du Dich nur damit beschäftigen, die komplette Umsetzung mache ich nicht.

                Einstieg: http://www.php-rocks.de/thema/74-ein...-domxpath.html

                ungetestet, aber als Beispiel trotzdem mal:
                PHP-Code:
                foreach ( $oXPath->query('//script') as $node )
                    
                $oXPath->query'//body' )->item(0)->removeChild$node ); 
                Competence-Center -> Enjoy the Informatrix
                PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                Kommentar


                • #9
                  Ich kann dafür auch den Dom-Crawler von Symfony empfehlen:
                  https://symfony.com/doc/current/comp...m_crawler.html

                  Die Komponente ist natürlich auch ohne das Framework einsetzbar.

                  Kommentar


                  • #10
                    Schönes Werkzeug, keine Frage... Aber warum, wenn es mit "Board"-Mitteln nicht unbedingt komplizierter lösbar ist?

                    Then, require the vendor/autoload.php file to enable the autoloading mechanism provided by Composer. Otherwise, your application won't be able to find the classes of this Symfony component.
                    Also wird bei dem Kenntnisstand des TE wieder mal geraten composer zu nutzen...
                    Competence-Center -> Enjoy the Informatrix
                    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                    Kommentar


                    • #11
                      Eigentlich sollte er sein Problem nun lösen können, denn die Funktionen stehen ja alle im Handbuch und wenn man sich Mühe gibt findet man auch immer etwas brauchbares in den Benutzerkommentaren.

                      Bis jetzt kam jeden Falls noch keine Zeile Code.

                      Kommentar


                      • #12
                        Ich denke auch mittlerweile, der Thread wurde nur erstellt, um den Link zu verbreiten.

                        [MOD: Link entfernt, geschlossen]
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Das ich mich genau dann melde wenn du den Link löscht war zufall, ich hab die ganze Zeit versuch die Beiträge auf den Links zum DOM zu verstehen. Hab rumgetestet usw. Kam übrigens auch nix dabei raus. Mein Ansatz war auch anders, deshalb tu ich mich so schwer. Kann mit dem DOM grad och nix anfangen aber das siehst du gleich in meinem Code.
                          Es ist also ein Select das man Auswählt und dann die entsprechenden Daten ausgelesen werden. Danach kann man Wörter und Zeichen zählen. Ist für mich ziemlich nützlich.

                          HTML-Code:
                          <html>
                          <head>
                              <meta charset="utf-8">
                              <style>
                                  body {
                                      padding: 0px;
                                      margin: 0px;
                                  }
                                  #content {
                                      width: 600px;
                                      display: table;
                                      margin: auto;
                                      margin-top: 10%;
                                      padding: 15px;
                                      position: relative;
                                      max-width: 100%;
                                  }
                                  #content select {
                                      width: 600px;
                                      height: 45px;
                                      font-size: 20px;
                                      padding: 0px 15px;
                                      margin-top: 12px;
                                      max-width: 100%;
                                  }
                                  #content input {
                                      font-size: 16px;
                                      width: 600px;
                                      padding: 12px;
                                      border-radius: 5px;
                                      border: 1px solid #e0e0e0;
                                      box-shadow: 0px 1px 2px #333;
                                      max-width: 100%;
                                  }
                                  #content form {
                                      position: relative;
                                  }
                                  button {
                                      position: absolute;
                                      height: 40px;
                                      width: 200px;
                                      top: 130px;
                                      padding: 0;
                                      background-color: #f2f2f2;
                                      border: 1px solid #333;
                                      font-size: 14px;
                                      max-width: 100%;
                                      cursor: pointer;
                                      color: #757575;
                                      border-radius: 5px;
                                      left: 70px;
                                  }
                                  .button_eins {
                                      left: 320px !important;
                                      top: 11px !important;
                                  }
                                  #content span {
                                      margin-top: 22px !important;
                                      display: inline;
                                      position: absolute;
                                      top: 200px;
                                      font-size: 21px;
                                      left: 200px;
                                      max-width: 100%;
                                  }
                                  .w2 {
                                      left: 340px !important;
                                  }
                                  #content #ausgabe .text {
                                      padding: 10px;
                                      display: table;
                                      margin: auto;
                                      font-size: 18px;
                                  }
                                  #content #ausgabe .text:nth-child(1) {
                                      margin-top: 180px !important;
                                  }
                              </style>
                          </head>
                          <body>
                          <div id="content">
                          <form method="post" action="">
                          <input name="url" type="text" placeholder="Gib hier die URL ein! z.B.(https://www.example.com)">
                          <select name="modifizierer">
                            <option value="@<body[^>]*>.*</body>@Us>/s">Bilder zeigen</option>
                            <option value="@<p[^>]*>.*</p>@Us">Paragrah Tags anzeigen</option>
                            <option value="(<h([1-6])>(.*?)</h\1>)">Uebeschriften anzeigen</option>
                            <option value="#<a[^>]+href[^>]*=[^>]*\'([^\']+)\'[^>]*>(.*)<\/a>">Links ausgeben</option>
                            <option value="/<title>(.+)<\/title>/i">Title auslesen</option>
                          </select>
                          <button>Text auslesen</button>
                          </form>
                          <?php
                          $url = file_get_contents($_POST[url]);
                          //$muster = $_POST['modifizierer'];
                          $muster = "@<body[^>]*>.*</body>@Us";
                          //echo $muster;
                          preg_match_all($muster,$url,$inhalt);
                          echo '<form method="post" action=""><input name="text" type="hidden" value="';
                          foreach($inhalt[0] as $inhalt_ausgabe){
                              echo strip_tags($inhalt_ausgabe);
                          }
                          echo '">';
                          echo "<button class='button_eins'>Wörter und Zeichen zählen</button></form>";
                          $text = $_POST['text'];
                          echo "<span class='woerter w2'>" . str_word_count($text, 0, 'äüöÄÜÖß') . " Wörter</span>";
                          echo "<span class='woerter'>" . strlen($text) . " Zeichen</span>";
                          echo "<div id='ausgabe'>";
                          foreach($inhalt[0] as $inhalt_ausgabe2){
                              echo "<p class='text'>" . strip_tags($inhalt_ausgabe2) . "</p>";
                          }
                          echo "</div>";
                          ?>
                          </div>
                          </body>
                          </html>

                          Kommentar


                          • #14
                            Das hier zum Beispiel aus deimem Artikel, wenn ich da eine Seite crawlen will und nur einen P Tag ausgeben möchte... Da kommt bei mir nix bei raus.
                            PHP-Code:
                            oDom = new DOMDocument;
                            $oDom->load'startseite.html' );

                            // jetzt kommt DOMXPath
                            $oXPath = new DOMXPath$oDom );
                            echo 
                            $oDomNodeList->item(0)->nodeValue
                            Der Teil klappt aber da wird mir auch nur wieder alles angezeigt und wie ich jetzt was ausschließe ist mir auch nicht so ganz klar
                            PHP-Code:
                            $oDom = new DOMDocument;
                            $oDom->loadHTMLFile'startseite.html' );



                              
                            $oDomNodeList $oDom->getElementsByTagName'body' );  
                            foreach ( 
                            $oDomNodeList as $oDomNode ) {

                                echo 
                            $oDomNode->nodeValue;


                            Als Null in diesem Thema ist mir das einfach nicht ersichtlich

                            Kommentar


                            • #15
                              [MOD: Beitrag angefügt, Thema geöffnet]
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X