【问题标题】:Selenium between HTML tagsHTML标签之间的硒
【发布时间】:2012-10-04 02:14:21
【问题描述】:

获取由 Javascript 创建的页面中的所有 HTML 以传递给 BeautifulSoup 的最佳方法是什么?

我目前正在使用:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys

from BeautifulSoup import BeautifulSoup

browser = webdriver.Firefox()
browser.get("http://www.yahoo.co.uk")
html = browser.find_elements_by_id("html")

但是“html”总是一个空列表。我做错了什么?

【问题讨论】:

  • Selenium 几乎可以完成 BeautifulSoup 所做的所有事情——您甚至可以直接访问和操作 javascript 创建的对象。硒绑定与漂亮的汤绑定也没有太大区别。

标签: python selenium screen-scraping beautifulsoup


【解决方案1】:

HTML 不是 id。它应该是这样的:

html = browser.find_elements_by_tag_name("html")

因为 html 是一个标签。

您最初执行的搜索将返回 id 已设置为“html”的所有元素。将返回的元素示例:

<p id="html">Lorem ipsum</p>

那个元素的id是“html”,标签名是“p”。

【讨论】:

    【解决方案2】:

    你也可以使用类似的东西

    html_source = browser.page_source
    

    这是一个 webdriver 提供的函数调用,正是为了收集完整的源代码或“获取页面中的所有 html”

    【讨论】:

      【解决方案3】:

      将页面源从 Selenium 传递给 Beautiful Soup 的正确方法是:

      from selenium import webdriver
      from selenium.common.exceptions import NoSuchElementException
      from selenium.webdriver.common.keys import Keys
      
      from BeautifulSoup import BeautifulSoup
      
      browser = webdriver.Firefox()
      browser.get("http://www.yahoo.co.uk")
      html_source = browser.page_source
      html = BeautifulSoup(html_source)
      

      这样,浏览器正在加载页面,提取完整的 html 源并将其传递给 BeautifulSoup。结果可以像任何其他 Beautiful Soup 对象一样被解析。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 2019-12-27
        • 2012-01-17
        • 2015-09-26
        相关资源
        最近更新 更多