2016-07-23 8 views
0

Ich versuche, Scraping zu üben, indem Sie auf eine Video-Website gehen und alle Titel der Videos auf der Homepage scraping. Mein einziges Problem ist, wenn der Titel zu lang ist, wird er mit der .string-Funktion in BeautifulSoup abgekürzt.Python: Schöne Suppe: Kann nicht einen vollständigen Titel von Parsing

Hier ist Beispiel HTML für die Analyse:

<head>...</head> 
<body class="home"> 
    <div id="main"> 
     <div id="content"> 
      <div id="vid_28" class="thumb-block "> 
       <div class="thumb-inside">...</div> 
       <p> 
        <a href="/vid_28/0/this_is_a_great_video_" 
        title="this is a great video">this is a great vi...</a> 
       </p> 
      </div> 
     </div> 
    </div> 
</body> 

Hier ist der Code, den ich mit den Titel zu drucken versucht bin:

import requests 
from bs4 import BeautifulSoup 

url = "example" 
r = requests.get(url) 

soup = BeautifulSoup(r.content, "lxml") 

links = soup.find_all("div", {"class":"thumb-block"}) 

for link in links: 
    for tag in link.find_all("a") 
     print(tag.string) 

Dieser Code funktioniert, wie ich es will, es sei denn es Druck ist die Saite "das ist ein toller Vi ...", der kurz geschnitten ist.

Wenn Sie im HTML bemerken, wird der Text nach "title =" nie kurz geschnitten.

Wie kann ich meinen Code ändern, um den Text in Klammern nach dem "title =" innerhalb des Elements zu erhalten, anstatt den abgeschnittenen Text zu erhalten?

+1

Warum greifen Sie dann nicht auf das Titelattribut statt auf ".string" zu? –

+1

Es ist, weil Sie versuchen, auf die Zeichenkette zuzugreifen, die in Ihrem Fall "das ist ein großes vi ..." ist und es das druckt. Versuchen Sie stattdessen, auf das Titelattribut zuzugreifen. – ChaoticTwist

+0

Ich habe versucht, "tag.string" durch "tag.title" zu ersetzen, alles was es tut, ist "None" in meiner Konsole. Ich habe die Dokumentation gelesen, aber ich sehe nichts, was darauf hindeutet, wie man neben dem eigentlichen Tag des Titels andere Attribute aufruft. – Destroxia

Antwort

0

Ich habe mein Problem herausgefunden, ich habe es in der Dokumentation gefunden, nachdem ich es mehrmals gelesen habe.

Wenn Sie irgendein Attribut drucken möchten, die ich den „title =“ wollte, musste ich die print(tag.string) zu print(tag['title'])

Dies ist, was @Rawring und @ChaoticTwist zuerst vorgeschlagen ändern, aber ich war nicht sicher, was Sie haben gemeint, indem Sie bis jetzt auf das Titelattribut zugreifen.

Vielen Dank für Ihre Zeit.