【问题标题】:Can't find element Beautifulsoup web-scraping londonstockexchange找不到元素 Beautifulsoup 网络抓取伦敦证券交易所
【发布时间】:2022-01-13 11:16:19
【问题描述】:

我正在尝试抓取以下网站:

www.londonstockexchange.com/news-article/THRG/net-asset-value-s/15242427

基本上我只想保存文本,即以下内容:

“贝莱德 Throgmorton Trust PLC 的未经审计的资产净值截至收盘时 2021 年 12 月 7 日的业务为: 938.74p 仅资本 947.82p 包括当年收入”

我已尝试使用以下代码,但是似乎无法解析该元素。任何想法为什么?

url = "https://www.londonstockexchange.com/news-article/THRG/net-asset-value-s/15242427"
page = requests.get(url) # Requests website
soup = BeautifulSoup(page.content, 'html.parser')
table = soup.find_all('div', attrs={'class':'news-body-content'})
table

尝试了各种方法,但是没有运气。希望有人能帮忙。

【问题讨论】:

  • 相关内容是通过 JavaScript 加载的。这可以通过使用curl 或在关闭 JavaScript 的情况下查看网页来确定。对于此类页面,requests 包不适合此类情况。您将需要另一个工具,例如 selenium 或 PyQt 的 QWebView(例如 pythoncentral.io/pyside-pyqt-tutorial-qwebview)。加载内容后,您可以使用 BeautifulSoup 对其进行解析。

标签: python html web web-scraping beautifulsoup


【解决方案1】:

这是因为特定文本是通过 JavaScript 动态添加到页面的,而在您的代码中,您只是向服务器发出请求,然后获取返回的数据(即页面源)。

运行 JavaScript 代码的是客户端(即您的浏览器),但 BeautifulSoup 本身没有该功能,因此您需要先使用不同的库来呈现 JavaScript 内容,然后再使用 BeautifulSoup 进行解析它。

【讨论】:

  • 但是,如果我使用 selenium 来获取它,我仍然会遇到麻烦。尝试了以下方法: url = driver.get(url) # 请求网站 html = driver.page_source soup = BeautifulSoup(html, 'html.parser') table = soup.find_all('div', attrs={'class':' news-body-content'}) 表
  • 我自己之前没有过多使用 Selenium,但看来您可能还需要使用 driver.execute_script 函数。
【解决方案2】:

我同意这里的所有其他海报;为了正确抓取它,您应该使用执行 JavaScript 的不同库。

但是,如果您是一个贪吃痛苦的人并且只能使用 BeautifulSoup,那么您正在寻找的信息是可以访问的。

页面底部有一个脚本标签,您可以使用soup.find(id='ng-lseg-state') 访问它。这将是一个混乱的字符串,但信息在那里:

\nNET ASSET VALUE\ n\ nBLACKROCK THROGMORTON TRUST PLC\ n5493003B7ETS1JEDPF59\ n\ nThe unaudited
                                net asset values
                                for BlackRock Throgmorton Trust PLC at close of \
                                nbusiness on 7 December 2021 were: \n\ n938 .74 p Capital only\ n947 .82 p Including current year income\ n

超级丑陋,我知道,但它就在那里。可能应该只做@hsac 并使用不同的库。

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多