Python sraping

Gast #5097720
Hi,

ich versuche mich gerade etwas ans sraping heranzutasten.

Ich habe in einer URL folgenden Teil
1
< script>
2
//<! [CDATA[
3
var _app = _app || {};
4
_app.plugin_version = '1.4.0.0';
5
_app.store_locale = 'de_DE';
6
_app.store_url = 'http';
7
_app.product_id = '19613';
8
_app.product_store_view_id = '1';
9
//]]>
10
</ script>

Dazu habe ich folgendes
1
                URL = BeautifulSoup (urlopen(link.rstrip()), "html.parser")
2
                result_product_id = URL.find_all("script")          
3
                #result_product_id = URL.find_all("script", {"_app": "product_id"})          
4

5
                print (result_product_id)

Ich möchte hier product_id ausgelesen bekommen. Also  19613

Wie würde das korrekt aussehen?
Seb schrieb:
> ich versuche mich gerade etwas ans sraping heranzutasten.

S c raping. ;-)

> Ich habe in einer URL folgenden Teil
>
1
> < script>
2
> _app.product_store_view_id = '1';
3
> </ script>
4
>
>
> Dazu habe ich folgendes
>
1
>                 URL = BeautifulSoup (urlopen(link.rstrip()),
2
> [...]
3
>
>
> Ich möchte hier product_id ausgelesen bekommen. Also  19613

Das kannst Du mit BeautifulSoup knicken, fürchte ich. BS parst HTML und 
XML, aber kein JavaScript. Andererseits hast Du hier natürlich den 
Vorteil, daß das JavaScript einfach aufgebaut ist und Du mit Regular 
Expressions arbeiten kannst -- also den Inhalt des Script-Tags mit BS 
ausschneiden und dann eine RegEx darauf ansetzen. HTH, YMMV.
Als Anfänger hab ich das sinngemäß so gemacht:
1
str = "_app.product_id = '19613';"
2
temp = str.split("_app.product_id = '");
3
print temp[1].split("'")[0];

Heute würde ich einfach einen regulären Ausdruck verwenden und als 
Kommentar anmerken dass es so nicht schön ist, aber ausreichend ist.
Soeren K. schrieb:
> Als Anfänger hab ich das sinngemäß so gemacht:
>
>
1
> str = "_app.product_id = '19613';"
2
> temp = str.split("_app.product_id = '");
3
> print temp[1].split("'")[0];
4
>
>
> Heute würde ich einfach einen regulären Ausdruck verwenden und als
> Kommentar anmerken dass es so nicht schön ist, aber ausreichend ist.

RegExe sind extrem leistungsfähig und cool, aber leider relativ teuer. 
Daher würde ich es bei größeren Datenmengen vermutlich eher so machen:
1
str = "_app.product_id = '19613';"
2
print( str.split("'")[1] )

In diesem Anwendungsfall ist das aber Makulatur. Jede Applikation, die 
Daten aus dem Internet zieht und die dann per BeautifulSoup mit 
html.parser parst, verbringt ihre Zeit ohnehin vornehmlich damit, auf 
das Netzwerk zu warten. Deswegen bringt es in diesem Falle wohl auch 
nicht viel, statt html.parser den schnelleren Parser lxml zu benutzen. 
;-)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.