Очистка данных с помощью прекрасного супа python 3.x и urrllib.request - PullRequest
0 голосов
/ 27 июня 2018

Я только недавно запустил python, и как проект меня попросили научиться собирать данные с веб-сайтов, но я запутался, потому что я еще новичок в html, поэтому, когда я делаю это в python

price_box = soup.find('div', attrs={'class':'price'})

Я не вижу, где имя класса отображается как просто 'цена' для цены акции на https://www.bloomberg.com/quote/SPX:IND.

для меня, класс определяется следующим образом

span class = "priceText__1853e8a5"> 2711,66

Может кто-нибудь объяснить мне, что мне не хватает или где моя ошибка?

РЕДАКТИРОВАТЬ: я использовал этот сайт, чтобы помочь, и я просто скопировал код, и он работает, но когда я проверяю элемент, чтобы увидеть для себя, я не вижу, что происходит.

https://medium.freecodecamp.org/how-to-scrape-websites-with-python-and-beautifulsoup-5946935d93fe

1 Ответ

0 голосов
/ 29 июня 2018

Конкретный ответ на ваш вопрос заключается в том, что вы можете использовать class_='className' вместо сопоставления тега div s и класса attr s. Проблема в вашем коде заключается в том, что класс HTML-тега 'priceText__1853e8a5' не 'price'

Поскольку содержимое на веб-странице, которое вы хотите очистить, не является статичным и вместо этого заполняется серверным или клиентским сценарием, вы должны разрешить заполнению информации перед очисткой страницы. Я использовал Selenium для этого и добавил time.sleep(5), чтобы ждать 5 секунд для загрузки информации. Затем я использовал browser.page_source, чтобы получить источник для страницы. Наконец, я смог получить исходный код страницы в soup и найти тег в супе, чтобы извлечь из него текст.

В качестве примечания, причина, по которой я использовал find_all() вместо find(), заключалась в том, что я не знал, будет ли больше тегов с тем же классом.

from selenium import webdriver
from bs4 import BeautifulSoup
import time
browser = webdriver.Chrome(executable_path=r"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\Python36_64\\selenium\\webdriver\\chromedriver_win32\\chromedriver.exe")
# above is my path to chromedriver, replace it with your own.
browser.maximize_window()
browser.get('https://www.bloomberg.com/quote/SPX:IND')
time.sleep(5) # wait 5 seconds for the page to load the js
pageSource = browser.page_source
soup = BeautifulSoup(pageSource, 'html.parser')
prices = soup.find_all(class_='priceText__1853e8a5')
price = prices[0].text
print(price)
...