Python Beautifulsoup abschneiden

Gast #4953493
Lesenswert?

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
Lesenswert?

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 #4954211
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren