Вызов webscraping в python возвращает пустые значения - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь получить последние цены (LTP) для разных товаров с сайта MCX https://www.mcxindia.com/market-data/market-watch в Python 2.0. Ниже приведен код, который я использую.

import requests
from bs4 import BeautifulSoup
url = 'https://www.mcxindia.com/market-data/market-watch'
page = requests.get(url)
soup = BeautifulSoup(page.text, 'html.parser')
soup.findAll('div',attrs={'class':'ltp green ltpcenter'})

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

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вы должны обработать JS, вы можете использовать селен для загрузки JS, см. Код ниже.

from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from bs4 import BeautifulSoup
driver = webdriver.Chrome()
driver.get("https://www.mcxindia.com/market-data/market-watch")
wait(driver, 10).until(EC.visibility_of_element_located(
        (By.XPATH, '//*[@class="symbol chnge-perc right5"]')))
source = driver.page_source
soup = BeautifulSoup(source, 'html.parser')
soup.findAll('div',attrs={'class':'ltp green ltpcenter'})
print soup
0 голосов
/ 09 сентября 2018

код ниже получает все рыночные данные, отображаемые на этой странице, извлеките все, что вы хотите, из ответа json.

import requests
url = "https://www.mcxindia.com/backpage.aspx/GetMarketWatch"

headers = {
    "Host": "www.mcxindia.com",
    "Origin": "https://www.mcxindia.com",
    "X-Requested-With": "XMLHttpRequest",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36",
    "Content-Type": "application/json",
"Referer": "https://www.mcxindia.com/market-data/market-watch",
"Accept": "application/json, text/javascript, */*; q=0.01",  
}


resp  = requests.post(url, headers = headers)
market_data = resp.json()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...