2017-11-08 1 views
0

ich mit BeautifulSoup gerade begonnen und möchte die Variablen extrahieren name, brand und price von der Website http://www.mediamarkt.nl/nl/category/_laptops-482723.html aber nicht bekommen, Dinge zu arbeiten.Python Web mit Beauifulsoup Schaben Variablen zu extrahieren

<script> 
var product1511322 = {"name":"ACER Aspire 3 A315-31-C3PK","id":"1511322","price":"399.00","brand":"ACER","ean":"4713883258289","dimension25":"InStock","dimension26":1.99,"dimension24":21.00,"category":"Computer","dimension9":"Laptops","dimension10":"Windows-laptops"}; 
</script> 

Ich habe versucht ...

from bs4 import BeautifulSoup 
import requests 

url = 'http://www.mediamarkt.nl/nl/category/_laptops-482723.html' 
soup = BeautifulSoup(requests.get(url).text, 'html.parser') 

script = soup.find_all('script') 

script.find_all('var') 

... aber das funktioniert nicht

jemand Vorschläge, wie alle auf ein name, brand und price Informationen zu extrahieren Liste des Datenrahmens?

+1

Ich bin nicht versiert in BS4, aber 'script.find_all ('var')' klingt wie Sie suchen nach '' Tags unter 'script', die wahrscheinlich nicht das ist, was Sie wollen. – tyteen4a03

+0

Danke. Haben Sie einen Vorschlag, welchen Befehl Sie verwenden sollen, um die drei Variablen zu extrahieren? – Rene

+0

wo ist 'name',' brand' und 'price' auf der Website. –

Antwort

1

Ich bemerkte gerade, dass Sie eine "Liste von Datenrahmen" wollten. Dies erhält eine list, wenn Sie wirklich einen "Datenrahmen" wollen, der aus diesem Ergebnis leicht zu übernehmen sein sollte.

from bs4 import BeautifulSoup 
import requests 
import ast # abstract syntax tree to parse dictionary text 

url = 'http://www.mediamarkt.nl/nl/category/_laptops-482723.html' 
soup = BeautifulSoup(requests.get(url).text, 'html.parser') 

scripts = soup.find_all('script') 
infos = [] 

for s in scripts: 
    if 'var product' in s.text[0:12]:   # find the script of interest 
     d = s.text.split(' = ')[1].strip(';') # get the product information 
     # parse information as dictionary text 
     data = ast.literal_eval(d) 

     infos.append(data) 

# Here's the list 
# print infos # [{'category': 'Computer', 'name': 'HP Pavilion X360 14-BA081ND', ... 'dimension9': 'Laptops', 'dimension10': 'Windows-laptops', 'brand': 'LENOVO'}] 

# for i in infos: 
#  print i['name'] # HP Pavilion X360 14-BA081ND 
#  print i['brand'] # HP 
#  print i['price'] # 629.00 

Es gibt wahrscheinlich einen besseren Weg, aber hoffe, das hilft.

+0

Vielen Dank! Dies ist sicherlich hilfreich. – Rene