Python Beautifulsoup abschneiden

Gast #4953493
Hi,

ich versuche mich gerade an Beautifulsoup.

So ein bischen klappt das. Ein Ergebnis habe ich schon, allerdings 
möchte ich das Ergebnis jetzt "kürzen" und nur einen Teil davon 
verwenden um damit Rechnen zu können.
1
result1 = soup.find_all("li", {"class":["lvprice", "bold"]})
2

3
for result_back_one in result1:
4
    
5
   one = result_back.get_text().strip()
6
   print (one)

In der Printausgabe bekomme ich nun ein Ergebnis mit Zeilenumbruch.
1
EUR 10,61
2
(EUR 1,06/100 g)
Wie kann ich das jetzt so abschneiden, dass ich ausschließlich mit den 
daten arbeite die vor dem Zeilenumbruch sind?

Also ich möchte Quasi, dass ich nur mit
1
EUR 10,61
weiterarbeiten kann.

Oder eine Klasse zusätzlich komplett sperren kann
1
 <div class="ppu">(<b>EUR</b> 1,06/100 g)</div>
Gast #4954131
Ja, dass hatte ich so bereits versucht, dann nimmt er mir aber nur den 
Zeilenumbruch raus und die zweite Zeile ibleibt trotzdem erhalten.
1
result1 = soup.find_all("li", {"class":["lvprice", "bold"]})
2

3
for result_back_one in result1:
4
    
5
   one = result_back.get_text().strip().splitlines() #.split('\n') 
6
   print (one)
Ergebnis:
1
['EUR 10,61', '(EUR 1,06/kg)']
Gast #4954149
print one[0]
print one[1] ?

Ist bei BeautifulSoup immer etwas schwierig nachzuvollziehen, wenn man 
die zugrundeliegende Website nicht selbst zum Herumspielen parat hat.
Gast #4954211
Die Seite ist kein Großes Geheimnis.

Für eine Marktsudie, suchen wir Durchschnittspreise gewisser Artikel 
heraus.

Da geht es sowohl um Soforkauf als auch Gebotene Angebote als Vergleich.
Also 2 verschieden Abfragen. Die jeweils über einen neuen Link gestartet 
werden.

Hier ein Beispiellink:
http://www.ebay.de/sch/i.html?Menge=5%2520L&_sacat=179496&_nkw=Motor%C3%B6l%2010w40&_dcat=179496

Mich interessieren hier nur die Dick geschriebenen Preise.

Bei Angeboten mit Liter oder kg Angaben bekomme ich immer Fehler mit dem 
Zusammenrechnen, da kg nicht gefloatet werden kann.
Gast #4954621
Ja, habe ich. Ich hatte das dummerweise an der falschen Stelle getestet.

Mir stellt sich jetzt allerdings die Frage, warum ich in dieser Variante 
kein replace mehr verwenden kann.



Anbei mal das ganze script
1
import os
2
import threading
3
import codecs
4
import time
5
import select
6
import csv
7
import traceback
8
from bs4 import BeautifulSoup 
9
from urllib.request import urlopen
10
import re
11
import requests
12

13

14

15
soupDE = BeautifulSoup (urlopen("http://www.ebay.de/sch/i.html?Menge=5%2520L&_sacat=179496&_nkw=Motor%C3%B6l%2010w40&_dcat=179496"), "html.parser")
16

17

18
result1_de = soupDE.find_all("li", {"class":["lvprice"]})
19
for result_back_one_de in result1_de:
20
    try:
21
       one_de = result_back_one_de.get_text().strip().splitlines() 
22
       #one_new_de = [one_de.replace('EUR','')]
23
       print (one_de[0])
24
    except Exception:
25
        print (sys.exc_info())
26
        pass
27
    
28
    
29
#if list_price_de:
30
 #   avg_list_price_de = sum * 1.0 / len(list_price_de)
31
  #  print (avg_list_price_de)
Gast #4954643
weil onede eine Liste ist, da könntest Du die Ersetzung zwar auf andere 
Weise durchführen, aber Du bist doch nur an einem Listenelement 
interessiert, dann sprich nur das an:
1
result1_de = soupDE.find_all("li", {"class":["lvprice"]})
2
for result_back_one_de in result1_de:
3
    try:
4
       one_de = result_back_one_de.get_text().strip().splitlines() 
5
       one_de_new = [one_de[0].replace('EUR','')]
6
       print (one_de_new)
7
....
Gast #4954644
Das habe ich den Ebay-mit-beautiful-soup-Abschnorchlern schon öfter 
geantwortet²: Ein paar Basics lernen ist sogar bei Python nötig:

str.splitlines(): Return a list of the lines in the string....
                           ^^^^

Hausaufgabe:
1) Eine list von strings selbst erzeugen.
2) Hat eine list eine Methode replace()?
3) Auf das erste oder zweite Element der list zugreifen.
4) In diesem Element irgendwas replacen.

Dieses Gestochere führt nicht weiter.





² oder ist das immer noch der gleiche?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.