【问题标题】:How to call JavaScript function using BeautifulSoup and Python如何使用 BeautifulSoup 和 Python 调用 JavaScript 函数
【发布时间】:2018-07-14 04:10:37
【问题描述】:

作为我项目的一部分,我正在执行网络抓取以从网站获取数据。我可以提出请求并获取 dom 中存在的数据。但是,一些数据会在 javascript onClick 函数上呈现。

一种方法是,使用 selenium 点击链接(调用 javascript 函数)并抓取渲染数据,但这个过程很耗时,我不想打开浏览器。

除了 selenium 之外还有其他方法可以实现吗?

网址:http://catalog.fullerton.edu/preview_entity.php?catoid=16&ent_oid=1849

在此网页的课程部分,所有课程都是超链接,一旦有人点击课程,就会调用一个javascript方法。我需要在 javascript 函数调用之后呈现的数据。

【问题讨论】:

    标签: javascript python selenium web-scraping urllib


    【解决方案1】:

    你不能。如果要运行 JavaScript,则需要使用无头浏览器。否则,您将不得不反汇编 JavaScript 并查看它的作用。

    当您的浏览器的开发者工具在“网络”选项卡中打开时单击该元素:

    您现在可以看到 JavaScript 从该 URL 下载新的 HTML。您可以使用 urllib 轻松发送相同的请求。

    【讨论】:

      【解决方案2】:

      你可以使用https://pypi.org/project/requests-html/这个库来渲染JavaScript内容,然后用beautiful soup来解析它。

      例子:

      from requests_html import HTMLSession  
        
      def render_JS(URL):
          session = HTMLSession()
          r = session.get(URL)
          r.html.render()
          return r.html.text
      

      【讨论】:

        【解决方案3】:

        你不能单独使用 BeautifulSoup 来做到这一点。创建这个模块是为了抓取 HTML(超文本标记语言)而不是 JavaScript、CSS 或任何其他网络语言。

        它可以在<script></script> 标签之间提取(这将非常有用),但除此之外,BeautifulSoup 就不是你需要的了。

        要调用 JavaScript 函数,您需要 headless browser,例如 PhantomJSSelenium。也有人尝试解析 JavaScript 以及使用 regex(这不是一个好主意)和使用其他方法(推荐)this question 中描述了一些方法并且可能有用。

        【讨论】:

          猜你喜欢
          • 2021-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-04
          • 2020-02-10
          • 2013-01-29
          • 2013-01-21
          • 1970-01-01
          相关资源
          最近更新 更多