Seite 1 von 1

Website-Scraping

Verfasst: Freitag 12. Februar 2021, 00:11
von Hallo12
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

Re: Website-Scraping

Verfasst: Freitag 12. Februar 2021, 07:02
von sparrow
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?

Re: Website-Scraping

Verfasst: Freitag 12. Februar 2021, 07:58
von Sirius3
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.