Hallo zusammen,
ich arbeite aktuell an einem Web Scraper der mir ein paar Daten einbringen soll -> bin absoluter Python anfänger.
Ich habe es mittlerweile geschafft mir die wichtigen Informationen mit re rauszupicken, allerdings sind es noch zu viele Zahlen!
Ich habe folgenden Code:
# Die Preise in die XLSX Spalte C schreiben
i = int(1)
for price in prizes_html:
i += 1
Cell = "C"+str(i)
CellContent = re.findall('[0-9]+', price.text)
worksheet.write(Cell, str(CellContent))
print(Cell, CellContent)
Ziel ist es, die Preise von bestimmten Produkten mit xlsxwriter und beautifulsoup in eine Exceltabelle zu schreiben.
Folgenden Output habe ich:
C2 ['5', '39', '4', '95', '25', '00', '10', '34']
C3 ['5', '40', '3', '95', '69', '00', '9', '35']
C4 ['5', '40', '3', '99', '9', '39', '10', '00']
C5 ['5', '41', '3', '50', '10', '00', '8', '91']
C6 ['5', '65', '4', '05', '60', '00', '9', '70', '2']
C7 ['5', '80', '3', '95', '40', '00', '9', '75']
C8 ['5', '89', '2', '95', '19', '00', '8', '84']
C9 ['5', '89', '3', '95', '39', '50', '9', '84']
Soweit so gut! Allerdings benötige ich nur die ersten beiden Ergebnisse. Die restlichen Zahlen sind irrelevant.
Also benötige ich in diesem Fall:
C2 5,39
C3 5,40
C4 5,40
Ehrlich gesagt scheitere ich an dieser Aufgabe... Kann mir einer weiterhelfen?
Und wenn mir jemand noch sagen kann, wie ich die Brackets wegbekomme, wäre ich ebenfalls sehr dankbar
Viele Grüße
Justin
Die ersten beiden Matches ausgeben
1 ist bereits ein int, das nochmal in eines umzuwandeln ist unsinnig. Wenn man aber einen Zähler in einer Schleife braucht, dann nimmt man enumerate.
Mit so einem regulären Ausdruck auf einen Text loszugehen, in dem es scheinbar mehrere Kommazahlen gibt, ist falsch. Wie sieht denn die Seite aus, damit wir einen besseren finden können.
Du willst keinen Text in Zellen scheiben, vor allem nicht die Stringrepräsentation einer Liste, sondern Zahlen. Dazu mußt Du erst die Eingabe in eine Zahl umwandeln.
Mit so einem regulären Ausdruck auf einen Text loszugehen, in dem es scheinbar mehrere Kommazahlen gibt, ist falsch. Wie sieht denn die Seite aus, damit wir einen besseren finden können.
Du willst keinen Text in Zellen scheiben, vor allem nicht die Stringrepräsentation einer Liste, sondern Zahlen. Dazu mußt Du erst die Eingabe in eine Zahl umwandeln.
Enumerate kannte ich vorher nicht, dass ändere ich um (y).
Die Seite(n) welche ich betrachten möchte sind: https://www.medizinfuchs.de/preisvergle ... 48585.html
Mit BeautifulSoup habe ich den HTML Code geparsed und dann mit html_findall('div', 'class_='price') die Preise selektiert.
Sobald ich zuhause bin, schicke ich gerne mal meinen ganzen Code. LG
Die Seite(n) welche ich betrachten möchte sind: https://www.medizinfuchs.de/preisvergle ... 48585.html
Mit BeautifulSoup habe ich den HTML Code geparsed und dann mit html_findall('div', 'class_='price') die Preise selektiert.
Sobald ich zuhause bin, schicke ich gerne mal meinen ganzen Code. LG
Ich kann nicht nachvollziehen, dass es jeweils mehr als einen Preis gibt:
Code: Alles auswählen
import requests
import bs4
URL = 'https://www.medizinfuchs.de/preisvergleich/pollival-1mg-ml-nasenspray-loesung-10-ml-ursapharm-arzneimittel-gmbh-pzn-13748585.html'
def main():
response = requests.get(URL)
response.raise_for_status()
html = bs4.BeautifulSoup(response.content)
for price in html.select('li.apotheke div.price'):
print(float(price.text.strip(' \t\n€').replace(',', '.')))
if __name__ == "__main__":
main()