Javascript Python webscraping:BeautifulSoup不显示所有html源内容

Javascript Python webscraping:BeautifulSoup不显示所有html源内容,javascript,python,selenium-webdriver,iframe,web-scraping,Javascript,Python,Selenium Webdriver,Iframe,Web Scraping,我对网络垃圾和python很陌生。我试图制作一个脚本,从中获取最后的交易价格,但是当我使用python请求它时,一些内容似乎丢失了。我已经成功地从其他网站获取了数据,但我似乎无法让我的代码在这个网站上运行这是我目前的代码: from bs4 import BeautifulSoup import requests r = requests.get("http://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?symbol=NFL

我对网络垃圾和python很陌生。我试图制作一个脚本,从中获取最后的交易价格,但是当我使用python请求它时,一些内容似乎丢失了。我已经成功地从其他网站获取了数据,但我似乎无法让我的代码在这个网站上运行
这是我目前的代码:

from bs4 import BeautifulSoup
import requests

r = requests.get("http://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?symbol=NFLX4333665&ticker=C647273")
c = r.content
soup = BeautifulSoup(c, "html.parser")

all = soup.find_all("div", {"class": "gr_row_a5"})
print(soup)

当我运行这个程序时,大部分重要数据都丢失了


任何帮助都将不胜感激

一些网页使用Javascript填充数据,而貌似页面内容的内容实际上并不在Beauty Soup正在处理的HTML中。这是其中一页

这是令人困惑的,因为如果使用(比如)Safari或Chrome中的web开发人员工具检查显示的页面,就会发现已呈现到DOM中的HTML。但是,如果您查看页面源代码,则根本找不到它


因此,对于这个页面,您无法使用Beautiful Soup解析数据。另一种选择是建立一个网站,以更直接的方式向您提供数据。另一种方法是尝试使用可以运行Javascript的库,然后可以从呈现的HTML中提取数据。(注意:我自己从来没有尝试过
请求html
,以这种方式运行Javascript时应该小心,但这是一种可行的方法。)也有一些项目,人们使用Selenium或类似的方法来获取html。但是
请求html
看起来是最简单的尝试。

小心iframe

如果观察到
div class=“gr_row_a5”
被放置在iframe内。要在iframe中抓取数据,您需要进入该iframe,然后需要获取页面源代码

from selenium import webdriver
import selenium
import httplib
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import StaleElementReferenceException
from selenium.common.exceptions import WebDriverException
from datetime import datetime as dt
from bs4 import BeautifulSoup


browser = webdriver.Chrome()
browser.delete_all_cookies()
browser.get('http://finra-markets.morningstar.com/BondCenter/BondDetail.jsp?symbol=NFLX4333665&ticker=C647273')

iframe = browser.find_element_by_id('ms-bond-detail-iframe')
browser.switch_to_frame(iframe)

c = browser.page_source
soup = BeautifulSoup(c, "html.parser")

all = soup.find_all("div", {"class": "gr_row_a5"})
print(all)

希望这能解决您的问题,如果不是,请告诉我。谢谢

您能提供更多信息吗?您希望提取哪些数据,缺少哪些数据?