【问题标题】:Executing a page's JavaScript at a low level with Python?使用 Python 在低级别执行页面的 JavaScript?
【发布时间】:2016-02-09 16:16:12
【问题描述】:

this页面被urllib2抓取时:

url = https://www.geckoboard.com/careers/
response = urllib2.urlopen(url)
content = response.read() 

在源代码中找不到以下元素(作业链接)(content

查看在浏览器中呈现的完整源代码:

因此 FRONT-END ENGINEER 元素似乎是由 Javascript 动态加载的。是否可以让 urllib2 (或其他低级库)在不涉及例如的情况下执行此 Javascript Selenium、BeautifulSoup 还是其他?

【问题讨论】:

  • 不,除非你可以在页面 JS 中搜索足够多的内容以找出链接的来源。

标签: python html web-scraping lxml urllib2


【解决方案1】:

这些信息是使用一些ajax request 加载的。你可以使用firebug 扩展mozilla 或者谷歌浏览器有它自己的工具来获取这些细节。只需在打开 URL 时在谷歌浏览器中点击f12。您可以在那里找到完整的详细信息。

在那里你会找到一个带有 url https://app.recruiterbox.com/widget/13587/openings/的请求

来自上述 url 的信息会在该网页中呈现。

【讨论】:

    【解决方案2】:

    据我了解,您正在为多个网站构建通用的东西,并且不想深入了解某个网站的加载方式,以及在-引擎盖来构建页面。在这种情况下,真正的浏览器是你的朋友 - 通过 selenium 在真正的浏览器中自动加载页面 - 然后,一旦页面加载完毕,将 .page_source 传递给 lxml.html(来自我看到这是您选择的 HTML 解析器)用于进一步解析。

    如果您不想显示浏览器或没有显示器,则可以使用无头浏览器 - PhantomJSvirtual display 上的常规浏览器。

    下面是一个示例代码,可帮助您入门:

    from lxml.html import fromstring
    from selenium import webdriver
    
    driver = webdriver.PhantomJS()
    driver.set_page_load_timeout(15)
    driver.get("https://www.geckoboard.com/careers/")
    
    # TODO: you might need a delay here
    
    tree = fromstring(driver.page_source)
    
    driver.close()
    
    # TODO: parse HTML
    

    您还应该知道,methods to locate elements in selenium 有很多,您甚至可能不需要单独的 HTML 解析器。

    【讨论】:

      【解决方案3】:

      我想你正在寻找这样的东西:https://github.com/scrapinghub/splash

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-24
        • 1970-01-01
        • 2012-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多