2017-02-11 11 views
0

Я пытаюсь создать поисковый робот BeautifulSoup. Ниже приведено то, что показано на веб-сайте, на котором я заинтересован в обходе.Извлечь данные между div-тегами Beautifulsoup в Python

<div class="product-total-price"> 
         <span itemprop="price">$14.76</span> 

Ценообразование "$ 14,76" есть все, что я заинтересован в Но когда я пытаюсь вернуть его

import bs4 
import requests 


def getPrice(productUrl): 
    res = requests.get(productUrl) 
    res.raise_for_status() 
    soup = bs4.BeautifulSoup(res.text, 'html.parser') 
    return soup.select("div.product-total-price > span")[0].parent 


price = getPrice('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html') 
print(price) 

Выход есть:

-

Я использовал .parent. чтобы посмотреть все будет

<div class="product-total-price"> 
<span itemprop="price">-</span> 

И poof нет цены показаны. Я новичок в программировании и пытался исследовать это, но мне не повезло. Любая помощь будет оценена, спасибо.

+0

Вы технически получаете правильный ответ обратно. Фактическая цена '($ 14.76)' не отображается до тех пор, пока страница не назовет некоторый javascript, и это то, что изменяет страницу, чтобы показать фактическую цену '($ 14.76)', а не местозаполнитель '-'. Прочитайте некоторые способы устранения этого здесь: https://datapatterns.readthedocs.io/en/latest/recipes/scraping-beyond-the-basics.html#dealing-with-javascript – serk

+0

Спасибо, серк. Я взглянул на вашу ссылку и нашел решение. Это не идеально, но это помогло мне узнать немного больше. В конце концов я использовал селен, я отправлю ответ ниже. Спасибо! –

ответ

0

enter image description here

Как вы можете видеть, есть -, а не цена.

0

Как уже упоминалось, страница не полностью представлена ​​прекрасным супом. Вот почему я получаю ответ «-», потому что он просто заполнитель по цене, пока страница не может называть некоторый javascript. Это, в свою очередь, изменило бы цену. Вот мой обходной путь

from selenium import webdriver 

browser = webdriver.Firefox() 
browser.get('https://www.homedepot.ca/en/home/p.12-sheetrock-ultralight-drywall-gypsum-panel-4-x-12.1000149007.html') 
elem = browser.find_element_by_css_selector('div.product-total-price > span') 

print(elem.text) 
    **$14.76** 
browser.quit() 

Я использовал селен, чтобы открыть браузер, Это откроет браузер, это может быть не идеально, но, конечно, лучше, чем ценообразование «-».

Вы можете получить селен здесь http://www.seleniumhq.org/