Scrapping einer website mit Beautiful soup
Verfasst: Sonntag 3. September 2023, 20:44
Hi und zwar bin ich gerade dabei einer Website mit Hilfe von bs4 Daten zu entnehmen, der betreffende html5 Code der Website ist folgender:
Ich möchte eigentlich alle Daten für jedes even bzw odd raus ziehen um damit dann weiter arbeiten zu können, allerdings funktioniert irgendetwas in meinem Code nicht. Ich schätze ich verwende bs4 noch falsch, da ich ein wenig verwirrt bin wie genau ich in dem html Code navigieren soll...
Hier der entsprechende Python Code:
Ich bekomme folgende Error Meldung:
Allerdings verstehe ich nicht ganz wo hier ein NoneType ist.
Meine Frage ist also, navigiere ich falsch mit bs4? Oder kann mir irgendjemand einen Tip geben, wie ich mit der Error Meldung umzugehen habe?
Vielen Dank für jede Hilfe zu bs4 Anwendung und Lösung meines Problems.
Ps: Hier die entsprechende url zur verwendeten Website: https://www.bpmdatabase.com/music/sear ... &genre=31
Code: Alles auswählen
<div class="table-container">
<table class="table table-bordered table-condensed table-striped" id="track-table">
<thead >
<tr>
<th class="artist orderable">
<a href="?artist=&title=&bpm=&genre=31&sort=artist">Artist</a>
</th>
<th class="orderable title">
<a href="?artist=&title=&bpm=&genre=31&sort=title">Title</a>
</th>
<th class="mix orderable">
<a href="?artist=&title=&bpm=&genre=31&sort=mix">Mix</a>
</th>
<th class="bpm orderable">
<a href="?artist=&title=&bpm=&genre=31&sort=bpm">BPM</a>
</th>
<th class="genre orderable">
<a href="?artist=&title=&bpm=&genre=31&sort=genre">Genre</a>
</th>
<th class="orderable rlabel">
<a href="?artist=&title=&bpm=&genre=31&sort=rlabel">Label</a>
</th>
<th class="orderable year">
<a href="?artist=&title=&bpm=&genre=31&sort=year">Year</a>
</th>
</tr>
</thead>
<tbody >
<tr class="odd">
<td class="artist"><a href="/music/by/aaliyah">Aaliyah</a></td>
<td class="title">One In A Million</td>
<td class="mix">—</td>
<td class="bpm">122</td>
<td class="genre">Pop</td>
<td class="rlabel">Atlantic</td>
<td class="year">2017</td>
</tr>
<tr class="even">
<td class="artist"><a href="/music/by/aaron-carter">Aaron Carter</a></td>
<td class="title">Aaron's Party (come Get It)</td>
<td class="mix">—</td>
<td class="bpm">117</td>
<td class="genre">Pop</td>
<td class="rlabel">Jive Records</td>
<td class="year">2000</td>
</tr>
...
<tr class="odd">
<td class="artist"><a href="/music/by/aaron-carter">Aaron Carter</a></td>
<td class="title">Don't Say Goodbye</td>
<td class="mix">PO PopRoXxX Intro Edit</td>
<td class="bpm">60</td>
<td class="genre">Pop</td>
<td class="rlabel">PO PopRoXxX Intro Edit</td>
<td class="year">2018</td>
</tr>
<tr class="even">
<td class="artist"><a href="/music/by/aaron-carter">Aaron Carter</a></td>
<td class="title">Don't Say Goodbye</td>
<td class="mix">PO PopRoXxX Quick Edit</td>
<td class="bpm">60</td>
<td class="genre">Pop</td>
<td class="rlabel">PO PopRoXxX Quick Edit</td>
<td class="year">2018</td>
</tr>
</tbody>
</table>
Hier der entsprechende Python Code:
Code: Alles auswählen
def extractData(url, file_name):
page = requests.get(url)
soup = bs(page.content, "html.parser")
odds = soup.find_All("tr", class_="odd")
evens = soup.find_All("tr", class_="even")
oddsANDevens = {}
for even in evens:
artist = even.find("td", class_="artist")
title = even.find("td", class_="title")
mix = even.find("td", class_="mix")
bpm = even.find("td", class_="bpm")
year = even.find("td", class_="year")
oddsANDevens.update({title: {'artist': artist, 'mix': mix, 'bpm': bpm, 'year': year}})
for odd in odds:
artist = odd.find("td", class_="artist")
title = odd.find("td", class_="title")
mix = odd.find("td", class_="mix")
bpm = odd.find("td", class_="bpm")
year = odd.find("td", class_="year")
oddsANDevens.update({title: {'artist': artist, 'mix': mix, 'bpm': bpm, 'year': year}})
with open(file_name, "w") as file:
json.dump(oddsANDevens, file)
Code: Alles auswählen
odds = soup.find_All("tr", class_="odd")
TypeError: 'NoneType' object is not callable
Meine Frage ist also, navigiere ich falsch mit bs4? Oder kann mir irgendjemand einen Tip geben, wie ich mit der Error Meldung umzugehen habe?
Vielen Dank für jede Hilfe zu bs4 Anwendung und Lösung meines Problems.
Ps: Hier die entsprechende url zur verwendeten Website: https://www.bpmdatabase.com/music/sear ... &genre=31