динамические значения веб-соскоб - PullRequest
0 голосов
/ 11 декабря 2018

Привет, ребята. Я пытался очистить некоторые страницы, содержащие значения, которые все время меняются, но я пока не могу узнать цены.Кто-нибудь может мне помочь, вот куда я дошел до сих пор!

import requests
import bs4
from urllib.request import Request, urlopen as uReq
from bs4 import BeautifulSoup as soup 
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

my_url = 'https://www.cryptocompare.com/'
binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe')
options = Options()
options.set_headless(headless=True)
options.binary = binary
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = True
driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path="C:/Users/Genti/AppData/Local/Programs/Python/Python36-32/Lib/site-packages/selenium/geckodriver.exe")
browser = webdriver.Firefox(firefox_binary=binary)
browser.get(my_url)
html = browser.execute_script("return document.documentElement.outerHTML")

sel_soup = soup(html, 'html.parser')
prices = sel_soup.findAll("td", {"class":"price"})
print(prices)

Ответы [ 3 ]

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

Если вы хотите использовать BS, а не Selenium Webdriver:

prices = sel_soup.select("td[class^='price'] > div")
0 голосов
/ 11 декабря 2018

Вы можете попробовать ниже код, чтобы получить названия валют, цены

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import datetime

from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

my_url = 'https://www.cryptocompare.com/'
binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe')
options = Options()
options.set_headless(headless=True)
options.binary = binary
cap = DesiredCapabilities().FIREFOX
cap["marionette"] = True
driver = webdriver.Firefox(firefox_options=options, capabilities=cap, executable_path="C:/Users/Genti/AppData/Local/Programs/Python/Python36-32/Lib/site-packages/selenium/geckodriver.exe")
driver.get(my_url)

names = [name.text.split('\n')[0] for name in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'desktop-name')))]
prices = [price.text for price in WebDriverWait(driver, 10).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, 'current-price-value')))]

print(datetime.datetime.now())
for name, price in zip(names, prices):
    print(name + " - " + price)
0 голосов
/ 11 декабря 2018

На случай, если вы хотите все 10 цен.вам нужно будет сохранить все цены в списке, например:

all_prices = driver.find_elements_by_css_selector("td[class='price'] div")  

, а затем просто перебрать цикл, чтобы получить значения:

for price in all_prices:  
  print(price.text)  

, дайте мне знать, еслиВы сталкиваетесь с любыми трудностями.

...