Forum: PC-Programmierung Python sraping


von Seb (Gast)


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?

von Sheeva P. (sheevaplug)


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.

von Kaj (Gast)


Lesenswert?


von Soeren K. (srkeingast)


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.

: Bearbeitet durch User
von Sheeva P. (sheevaplug)


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. 
;-)

von Imonbln (Gast)


Lesenswert?

ggf hilft dir Dieser Blogeintrag deine javascript Seite zu scrappen.

https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.