Получить значение <span>, используя Python Web Scrap - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь получить цену продукта, используя BeautifulSoup в python.Но я продолжаю получать ошибки, независимо от того, что я пытаюсь.

Изображение сайта, который я пытаюсь переписать в сети

Я хочу получить значение 19,90,Я уже сделал код, чтобы получить все названия продуктов, и теперь мне нужны их цены.

    import requests
from bs4 import BeautifulSoup

url = 'https://www.zattini.com.br/busca?nsCat=Natural&q=amaro&searchTermCapitalized=Amaro&page=1'

page = requests.get(url)

soup = BeautifulSoup(page.text, 'html.parser')

price = soup.find('span', itemprop_='price')

print(price)

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Менее идеальным является анализ JSON, содержащий цены

import requests
import json
import pandas as pd
from bs4 import BeautifulSoup

url = 'https://www.zattini.com.br/busca?nsCat=Natural&q=amaro&searchTermCapitalized=Amaro&page=1'
page = requests.get(url)    
soup = BeautifulSoup(page.content, 'lxml')
scripts = [script.text for script in soup.select('script') if 'var freedom = freedom ||' in script.text]
pricesJson = scripts[0].split('"items":')[1].split(']')[0] + ']'
prices = [item['price'] for item in  json.loads(pricesJson)]
names = [name.text for name in soup.select('#item-list [itemprop=name]')]
results = list(zip(names,prices))

df = pd.DataFrame(results)
print(df)

Пример вывода:

enter image description here

0 голосов
/ 05 декабря 2018

span[itemprop='price'] генерируется JavaScript.Исходное значение сохраняется в div[data-final-price] со значением, например 1990, и вы можете отформатировать его в 19,90 с помощью регулярных выражений.

import re

...
soup = BeautifulSoup(page.text, 'html.parser')
prices = soup.select('div[data-final-price]')
for price in prices:
    price = re.sub(r'(\d\d$)', r',\1', price['data-final-price'])
    print(price)

Результаты:

19,90
134,89
29,90
119,90
104,90
59,90
....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...