Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 刮削--缺少<;的文本元素;dt>;使用PyQt4从JS生成的页面标记_Javascript_Web Scraping_Beautifulsoup_Pyqt_Pyqt4 - Fatal编程技术网

Javascript 刮削--缺少<;的文本元素;dt>;使用PyQt4从JS生成的页面标记

Javascript 刮削--缺少<;的文本元素;dt>;使用PyQt4从JS生成的页面标记,javascript,web-scraping,beautifulsoup,pyqt,pyqt4,Javascript,Web Scraping,Beautifulsoup,Pyqt,Pyqt4,我试图使用PyQt4进行搜索,但由于某些原因,标记的文本元素在我使用BeautifulSoup搜索时没有显示出来 我对使用PyQt4非常陌生,所以我不确定这里出了什么问题。我得到了文本标记的所有文本元素,但没有任何文本元素。页面是否未完全加载或出现了什么问题?感谢您的帮助 以下是我到目前为止一直在使用的代码: class Client(QWebPage): def __init__(self, url): print('\n\nLoading: \n', url)

我试图使用PyQt4进行搜索,但由于某些原因,
标记的文本元素在我使用BeautifulSoup搜索时没有显示出来

我对使用PyQt4非常陌生,所以我不确定这里出了什么问题。我得到了文本标记的所有文本元素,但没有任何文本元素。页面是否未完全加载或出现了什么问题?感谢您的帮助

以下是我到目前为止一直在使用的代码:

class Client(QWebPage):
    def __init__(self, url):
         print('\n\nLoading: \n', url)
         self.app = QApplication(sys.argv)
         QWebPage.__init__(self)
         self.loadFinished.connect(self.on_page_load)
         self.mainFrame().load((QUrl(url)))
         self.app.exec()
         self.app.quit()

    def on_page_load(self):
        self.app.quit()

url = 'http://www.hkex.com.hk/Market-Data/Securities-Prices/Equities/Equities-Quote?sym=700&sc_lang=en'

client_response = Client(url)

source = client_response.mainFrame().toHtml()
soup = bs.BeautifulSoup(source, 'lxml')


table = soup.find('div', {'class' : 'left_list_leve quote'})

price =  soup.find('span' , {'class' : 'col_last'})
name = soup.find('p' , {'class' : 'col_name'})
all_dls = table.findAll('dl')
这是我运行脚本后得到的结果

   Loading:
 http://www.hkex.com.hk/Market-Data/Securities-Prices/Equities/Equities-Quote?sym=700&sc_lang=en
[<dl>
<dd class="ico_name label_prevcls">PREV. CLOSE*</dd>
<dt class="ico_data col_prevcls"></dt>
</dl>, <dl>
<dd class="ico_name label_open">OPEN**</dd>
<dt class="ico_data col_open"></dt>
</dl>, <dl>
<dd class="ico_name label_turnover">TURNOVER</dd>
<dt class="ico_data col_turnover"></dt>
</dl>, <dl>
<dd class="ico_name label_volume">VOLUME</dd>
<dt class="ico_data col_volume"></dt>
</dl>, <dl>
<dd class="ico_name label_mktcap">MKT CAP</dd>
<dt class="ico_data col_mktcap"></dt>
</dl>, <dl>
<dd class="ico_name label_lotsize">LOT SIZE</dd>
<dt class="ico_data col_lotsize"></dt>
</dl>, <dl>
<dd class="ico_name label_bid">BID</dd>
<dt class="ico_data col_bid"></dt>
</dl>, <dl>
<dd class="ico_name label_ask">ASK</dd>
<dt class="ico_data col_ask"></dt>
</dl>, <dl>
<dd class="ico_name label_eps">EPS</dd>
<dt class="ico_data col_eps"></dt>
</dl>, <dl>
<dd class="ico_name label_pe">P/E</dd>
<dt class="ico_data col_pe"></dt>
</dl>, <dl>
<dd class="ico_name label_divyield">DIV YIELD</dd>
<dt class="ico_data col_divyield"></dt>
</dl>]
<span class="col_last"></span>
<p class="col_name"></p>
加载:
http://www.hkex.com.hk/Market-Data/Securities-Prices/Equities/Equities-Quote?sym=700&sc_lang=en
[
上一关*
, 
打开**
, 
人事变更率
, 
卷
, 
MKT帽
, 
批量
, 
投标
, 
问
, 
EPS
, 
市盈率
, 
股息收益率
]

尝试使用selenium:

from selenium import webdriver
import time

driver = webdriver.PhantomJS()
driver.get('http://www.hkex.com.hk/Market-Data/Securities-    Prices/Equities/Equities-Quote?sym=700&sc_lang=en')

content = driver.find_element_by_xpath('//*[@class="left_list_item list_item_op"]')
print(content.text)
样本输出:

SIVABALANs-MBP:Desktop siva$ python test_phantomjs.py 
/Users/siva/anaconda3/lib/python3.6/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
PREV. CLOSE*
HK$460.000
OPEN**
HK$459.000
TURNOVER
HK$11.08B
VOLUME
24.33M
MKT CAP
HK$4,297.37B
LOT SIZE
100
SIVABALANs-MBP:Desktop siva$ 

缺少一个_loadFinished()方法

产出:

<dl>
<dd class="ico_name label_prevcls">PREV. CLOSE*</dd>
<dt class="ico_data col_prevcls">HK$460.000</dt>
</dl>
<dl>
<dd class="ico_name label_open">OPEN**</dd>
<dt class="ico_data col_open">HK$459.000</dt>
</dl>
<dl>
<dd class="ico_name label_turnover">TURNOVER</dd>
<dt class="ico_data col_turnover">HK$11.08B</dt>
</dl>
<dl>
<dd class="ico_name label_volume">VOLUME</dd>
<dt class="ico_data col_volume">24.33M</dt>
</dl>
<dl>
<dd class="ico_name label_mktcap">MKT CAP</dd>
<dt class="ico_data col_mktcap">HK$4,297.37B</dt>
</dl>
<dl>
<dd class="ico_name label_lotsize">LOT SIZE</dd>
<dt class="ico_data col_lotsize">100</dt>
</dl>
<dl>
<dd class="ico_name label_bid">BID</dd>
<dt class="ico_data col_bid">HK$452.400</dt>
</dl>
<dl>
<dd class="ico_name label_ask">ASK</dd>
<dt class="ico_data col_ask">HK$452.600</dt>
</dl>
<dl>
<dd class="ico_name label_eps">EPS</dd>
<dt class="ico_data col_eps">RMB4.383</dt>
</dl>
<dl>
<dd class="ico_name label_pe">P/E</dd>
<dt class="ico_data col_pe">91.55x</dt>
</dl>
<dl>
<dd class="ico_name label_divyield">DIV YIELD</dd>
<dt class="ico_data col_divyield">0.13%</dt>
</dl>

上。接近*
港币460000元
打开**
459.000港元
人事变更率
110.8亿港元
卷
24.33米
MKT帽
42973.7亿港元
批量
100
投标
452.400港元
问
452.600港元
EPS
4383元
市盈率
91.55倍
股息收益率
0.13%

此id是由JavaScript生成的动态内容。您需要一个像Selenium这样的工具来在JavaScript执行后获取页面内容,或者使用python请求等直接请求session@Anderssonselenium并不是“在JavaScript执行后获取页面内容”的唯一方法,PyQt可以像DryScrape一样做到这一点。看看我对@Dan Dev的回答,我没有说硒是唯一的way@AnderssonOP要求提供PyQt解决方案,或者至少说他正在使用它。你说“需要像Selenium这样的工具”,但他使用的是PyQt,如果你问我的话,这是误导性的。@Dan Dev,我不否认这个事实。我也没有提供任何解决方案——只是在评论中提供建议。我很高兴你在PyQt中得到了一个解决方案,我希望它会很有用
<dl>
<dd class="ico_name label_prevcls">PREV. CLOSE*</dd>
<dt class="ico_data col_prevcls">HK$460.000</dt>
</dl>
<dl>
<dd class="ico_name label_open">OPEN**</dd>
<dt class="ico_data col_open">HK$459.000</dt>
</dl>
<dl>
<dd class="ico_name label_turnover">TURNOVER</dd>
<dt class="ico_data col_turnover">HK$11.08B</dt>
</dl>
<dl>
<dd class="ico_name label_volume">VOLUME</dd>
<dt class="ico_data col_volume">24.33M</dt>
</dl>
<dl>
<dd class="ico_name label_mktcap">MKT CAP</dd>
<dt class="ico_data col_mktcap">HK$4,297.37B</dt>
</dl>
<dl>
<dd class="ico_name label_lotsize">LOT SIZE</dd>
<dt class="ico_data col_lotsize">100</dt>
</dl>
<dl>
<dd class="ico_name label_bid">BID</dd>
<dt class="ico_data col_bid">HK$452.400</dt>
</dl>
<dl>
<dd class="ico_name label_ask">ASK</dd>
<dt class="ico_data col_ask">HK$452.600</dt>
</dl>
<dl>
<dd class="ico_name label_eps">EPS</dd>
<dt class="ico_data col_eps">RMB4.383</dt>
</dl>
<dl>
<dd class="ico_name label_pe">P/E</dd>
<dt class="ico_data col_pe">91.55x</dt>
</dl>
<dl>
<dd class="ico_name label_divyield">DIV YIELD</dd>
<dt class="ico_data col_divyield">0.13%</dt>
</dl>