2016-06-05 29 views
0

Liest das Buch "Web Scraping mit Python" und es ist anständig, aber manchmal (frustrierend) Glossen über Codes Leser müssen herumspielen, ohne die Ausgabe zu zeigen noch relevante Einschränkungen zu erwähnen .BeautifulSoup - Extrahieren Sie Text innerhalb Tags mit "text ="

Ich verbrachte 4 Stunden, um herauszufinden, warum:

fullText.findAll('a', text="bees") 

eine leere Zeichenfolge in Bezug auf den folgenden Tag zurückgegeben:

<a class="search">Why are the bees in my soup bees are bad</a> 

, wenn das Buch es, wie oft "zählen würde zu vorschlagen schien Bienen "aufgetreten auf meiner bs4.BeautifulSoup Seite. Erst nach 4 Stunden beim Lesen von Stack-Posts und dem Hantieren mit Codes habe ich festgestellt, dass ich das vollständige Stück Text in text = "" eingeben musste, um die gewünschte Ausgabe zu erhalten. Das ist ich es ändern musste:

fullText.findAll('a', text="Why are the bees in my soup bees are bad") 

.

.

.

.

Wie auch immer, alles, was ich fragen will, ist ein 2 Frage Teil: Wenn ich ausgegeben habe alle meine < strong> Tags mit dem folgenden:

fullText.findAll('strong') 
  1. [OHNE Konvertierung in einen String] gibt es eine Möglichkeit, findAll oder eine andere Funktion erfolgreich zu suchen, um zu sehen, ob Bienen auftritt als Teil des Textes innerhalb der Tags ohne nach dem vollständigen Text innerhalb des Tags zu suchen
  2. gibt es eine BeautifulSoup oder eine andere Funktion mit findAll beteiligt, die die Tag-Definitionen aus dem Ausgabestreifen und wird nur innerhalb des Tags

Ich bin mir sehr wohl bewusst, dass die zweite Frage Volltext darstellen hat wurde vorher gefragt. Nichts, was ich versucht habe, hat wirklich funktioniert. Wenn Sie Ihre Ausgabe einschließen könnten, wäre das großartig, so dass ich weiß, was ich erwarten sollte und Ergebnisse vergleichen kann, wenn ich Probleme erhalte.

Antwort

2
  1. soup.find_all('strong', string=re.compile("bee"))

Dies wird eine Liste aller strong Tags mit "bee" als Teil des Textes zurück. Es verwendet Regex.

  1. string Attribut wird dies tun.

    soup.find_all('strong')[0].string

soup.find_all('strong') wird eine Liste aller starken Tags zurückkehren und damit indiziert ich sie an einem bestimmten Tag zuzugreifen.

+0

Vielen Dank shiva. Beide arbeiten und die zweite funktioniert sogar besser als die Frage, die ich gestellt habe. . Ich habe versucht, lesen und experimentieren mit der python.org Dokumentation für "re" einschließlich "kompilieren" vor und nach und war absolut verloren. Ich wünschte, es würde "Ausgabe" enthalten, also weiß ich, wonach ich suchen musste. . YouTube-Videos haben auch nicht wirklich viel geholfen, aber ich werde nicht mehr Zeit in Anspruch nehmen, werde herumlesen und werde eine Erklärung darüber veröffentlichen, was es tut, wenn ich es für andere ähnlich verwirrte Benutzer nagle. Wirklich, Danke dir so sehr. Du hast mir einen ziemlich großen Kummer erspart. – Inquisitor01

+0

Wenn dies das Problem für Sie löst, können Sie die Antwort akzeptieren. N willkommen. – shiva

+0

Um ehrlich zu sein, hatte ich zunächst keine Ahnung, was das Häkchen bedeutete. Antwort definitiv akzeptiert und danke. – Inquisitor01