मैं जावास्क्रिप्ट का उपयोग करने वाली वेबसाइट को स्क्रैप करने की कोशिश कर रहा हूं। मैंने सेलेनियम में xpath पर इसी तरह के प्रश्नों को देखा है और उन्होंने वास्तव में मदद नहीं की है। मैंने अनुरोधों का उपयोग करने की कोशिश की, लेकिन जावास्क्रिप्ट पूरी तरह से लोड नहीं होता है इसलिए मैं सेलेनियम क्रोम ड्राइवर का उपयोग कर रहा हूं।

मैंने पूर्ण xpath, xpath, और वर्ग नाम दोनों की कोशिश की है और तत्व प्राप्त करने में असमर्थ हूं। मेरा कोड और एचटीएमएल नीचे है।

site = 'https://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?ticker=C614515&symbol=BBBY4144685'
browser = webdriver.Chrome(executable_path)
browser.get(site)
browser.find_elements_by_xpath('//*[@id="msqt_summary"]/div[2]/table/tbody/tr[1]/td[2]/span[@class="gr_text1"]')
browser.find_elements_by_xpath('//*[@id="no_border_no_center"]/div/div/div[1]/div/div/div[2]/div[2]/table/tbody/tr[1]/td[2]/span[@class="gr_text1"]')

<html xmlns="//www.w3.org/1999/xhtml"><head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
    <meta http-equiv="expires" content="12 Jan 2018">
    <title>Bond - Morningstar</title>
    <link href="//quotes.morningstar.com/bondq/static/common/css/reports.css" rel="stylesheet" type="text/css">     

</style>
<script type="text/javascript" src="//quotespeed.morningstar.com/js/qt_loader.js"></script><link rel="stylesheet" type="text/css" href="//finra-markets.morningstar.com/apis/quicktake/quicktake_finra.css"><script type="text/javascript" src="//finra-markets.morningstar.com/apis/quicktake/version_finra.js"></script>
<script type="text/javascript">window.onerror=function(msg){$("body").attr("JSError",msg);}</script>
</head>



<body id="no_border_no_center">
<div class="wrapper">
    <div class="gr_row_a5" id="msqt_summary"> 
               <div class="gr_colm_a2b gr_text1">
                   <table class="gr_table_b1" border="0" cellpadding="0" cellspacing="0" width="100%">
                       <tbody>
                           <tr valign="top">                               
                               <td class="gr_table_colm23">
                                   <h3 class="ms-gl-font10"> CUSIP</h3>                  
                                   <span class="gr_text1"> 075896AB6</span>
                               </td>                                
                            </tr>

0
rokman54 29 अक्टूबर 2020, 19:21
यह //*[@id="msqt_summary"] के अंतर्गत कोई /div[2] (दूसरा DIV) नहीं है - निश्चित रूप से आप /div[1] चाहते हैं
 – 
Randy Casburn
29 अक्टूबर 2020, 19:25
साथ ही, आपको चयनकर्ताओं के साथ मदद करने के लिए ChroPath जैसे टूल का उपयोग करना चाहिए।
 – 
Randy Casburn
29 अक्टूबर 2020, 19:26

2 जवाब

सबसे बढ़िया उत्तर

तत्व iframe के अंदर है। तत्व तक पहुँचने के लिए आपको इसे पहले स्विच करना होगा।

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

site = 'https://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?ticker=C614515&symbol=BBBY4144685'
browser = webdriver.Chrome(executable_path)
browser.get(site)
WebDriverWait(browser,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"ms-bond-detail-iframe")))    
print(browser.find_element_by_xpath('//*[@id="msqt_summary"]/div[2]/table/tbody/tr[1]/td[2]/span[@class="gr_text1"]').text)

iframe से बाहर आने के लिए आपको उपयोग करने की आवश्यकता है।

browser.switch_to.default_content()
0
KunduK 29 अक्टूबर 2020, 21:42
from bs4 import BeautifulSoup

def job():
    url = "yoururlhere"
    page = requests.get(url)
    soup = BeautifulSoup(page.content,'html.parser')
    price = soup.find(id ="idofthething").get_text()
job()

आप सामग्री का उपयोग कर सकते हैं या कुछ और bs4 में आईडी भाग के लिए शामिल है

0
Client 30 अक्टूबर 2020, 10:07
मैंने पहले ही कहा है कि अनुरोध और सुंदरसूप काम नहीं करता है क्योंकि जेएस पूरी तरह से लोड नहीं होता है।
 – 
rokman54
30 अक्टूबर 2020, 22:11