Извлечение - PullRequest
       4

Извлечение

1 голос
/ 05 мая 2020

Я пытался очистить этот веб-сайт , используя json, как описано в верхнем ответе этого сообщения .

Указанный c код i Я пытаюсь очистить следующий код HTML:

<div data-v-5005fea4 class="c-product-tile">

, который содержит такой код, как:

<span data-v119c4757 class="major-price inline-block">25</span>

, где я хочу извлечь значение 25.

Моя проблема в том, что использую ли я json или Beautifulsoup, он возвращает 'None', и я не знаю, куда go отсюда

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Используйте это ниже API , который возвращает вывод в формате json.

import requests
res=requests.get("https://butik.mad.coop.dk/api/search/search?categories=7&lastFacet=categories&pageSize=30").json()

for item in res['products']:
    print(item['displayName'])
    print(item['salesPrice']['amount'])
    print(item['salesPrice']['major'])

Вывод :

Avocado
25.0
25
Økologiske Avocado
19.95
19
Spisemodne Avocado
23.95
23
Økologiske Avocado
29.5
29
Avocado
9.5
9

Чтобы получить первое значение элемента, используйте это.

import requests
res=requests.get("https://butik.mad.coop.dk/api/search/search?categories=7&lastFacet=categories&pageSize=30").json()

print(res['products'][0]['salesPrice']['amount'])
print(res['products'][0]['salesPrice']['major'])
0 голосов
/ 05 мая 2020

Как я уже упоминал в комментарии, эти данные динамически загружаются Javascript; таким образом, вы не можете получить его с помощью stati c средства загрузки веб-сайта.

Вы можете установить Selenium: https://selenium-python.readthedocs.io/installation.html

Тогда вы должны сделать это:

from selenium import webdriver
from bs4 import BeautifulSoup as bs

driver = webdriver.firefox()
driver.get("https://butik.mad.coop.dk/frugt-og-groent/groentsager/avocado/c-7")   

soup = bs(driver.page_source,'lxml')

Затем вы увидите данные, которые вам нужны:

In [17]: soup.find_all('span',{'class':"major-price inline-block"})
Out[17]: 
[<span class="major-price inline-block" data-v-119c4757="">25</span>,
 <span class="major-price inline-block" data-v-119c4757="">19</span>,
 <span class="major-price inline-block" data-v-119c4757="">23</span>,
 <span class="major-price inline-block" data-v-119c4757="">29</span>,
 <span class="major-price inline-block" data-v-119c4757="">9</span>]
...