Python sraping

Gast #5097720
Lesenswert?

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?
#5097760
Lesenswert?

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.
#5097790
Lesenswert?

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.
#5097822
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren