Website-Scraping

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Hallo12
User
Beiträge: 7
Registriert: Sonntag 7. Februar 2021, 14:12

Hallöle,

ich hab da ein Problem und ich weiß nicht, wie ich es lösen kann.
Vorgeschichte: Ich will einen Website Scraper zu einem Spiel zusammen basteln um Spiele Daten abzurufen usw.
Problem: Ich habe ein Programm geschrieben, aber wenn ich es ausführe unterstreicht er das "p" (ohne Anführungszeichen) bei dem letzten Print ganz unten, aber ich weiß nicht wieso...Kann mir bitte jemand dabei helfen? :D

Danke im Voraus
:) # Module importieren
import requests
import csv
from bs4 import BeautifulSoup

# Adresse der Webseite
url = "http://drednot.io/"

# GET-Request ausführen
response = requests.get(url)

# BeautifulSoup HTML-Dokument aus dem Quelltext parsen
html = BeautifulSoup(response.text, 'html.parser')

#Klasse finden
ShipIDs_html = html.find_all('span', class_="sy-id")
ShipCrews_html = html.find_all('span', class_="sy-crew")
ShipNames_html = html.find_all('div', class_="sy-title")

ShipNames = list()
for ShipName in ShipNames_html:
ShipNames.append(ShipName.text)

ShipCrews = list()
for ShipName in ShipNames_html:
ShipNames.append(ShipCrew.text)

ShipIDs = list()
for ShipID in ShipIDs_html:
ShipIDs.append(ShipID.text)

for t in zip(ShipNames,ShipCrews,ShipIDs):

print(t) #hier unterstreicht der Computer bei der Ausführung das p bei print
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Dein Code gehört zwischen die Code-,Tags, nicht dahinter :)

Die Namen von Variablen schreibt man klein_mit_unterstrich.

Was heißt denn, es wird etwas unterstrichen? Python unterstreicht nichts, manche Entwicklungsumgebungen schon.
Gibt es denn eine Fehlermeldung?
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Statt drei paralleler Listen würde man nach allen shipyard-item-Elementen suchen und darin dann jeweils nach einem Title, Id oder Crew suchen.
`t` ist dann auch ein sehr schlechter Name für ein Schiff.
Nach einem for wird ein Block erwartet, Dein print ist aber nicht eingerückt.

Code: Alles auswählen

import requests
import csv
from bs4 import BeautifulSoup

# Adresse der Webseite
url = "http://drednot.io/"

# GET-Request ausführen
response = requests.get(url)

# BeautifulSoup HTML-Dokument aus dem Quelltext parsen
html = BeautifulSoup(response.text, 'html.parser')

shipitems = html.find_all('div', class_="shipyard-item")
ships = [
    {
        "id": item.find('span', class_="sy-id").text,
        "name": item.find('div', class_="sy-title").text,
        "crew": item.find('span', class_="sy-crew").text,
    } for item in shipitems
]

for ship in ships:
    print(ship)
So wäre es in der Theorie. Die Seite wird aber mit viel Javascript aufgebaut, so dass das Suchen im HTML nicht funktioniert.
Dagegen werden die Schiffe frei Haus als JSON unter "https://drednot.io/shiplist" geliefert.
Antworten