屏幕抓取动态网页在python与Ghost.py

Screen scraping dynamic webpage in python with Ghost.py

本文关键字:Ghost py python 抓取 动态 网页 屏幕      更新时间:2023-09-26
ghost = Ghost()
page, rcs = ghost.open(https://soundcloud.com/passionpit/sets/favorites)
page, rcs = ghost.wait_for_page_loaded()
songs = ghost.evaluate("document.getElementsByClassName('soundTitle__title');")
print songs

我试图使用上面的代码找到所有的html元素在上面的页面上有类'soundTitle__title',但截至目前我的输出是

QFont::setPixelSize: Pixel size <= 0 (0)
({PyQt4.QtCore.QString(u'length'): 0.0}, [])
谁能帮我看看我的问题在哪里?当我在浏览器控制台中运行document.getElementsByClassName('soundTitle__title')时,我得到了我期望的输出,为什么Python输出不同?

或者是否有一些方法让我使用Ghost.py或其他类似的库来获得JavaScript运行后页面的源代码(在使用浏览器开发人员工具检查元素时看到的源代码)?

我得到了这个工作,并建议使用Splinter,它基本上只是运行phantomjs和selenium。

你需要运行pip install splinter并在你的机器上安装phantomjs,如果你有npm,可以通过下载/解tarring或npm -g install phantomjs来安装。但总的来说,安装和依赖是最小的和直接的。

下面的代码返回'Ryn Weaver - OctaHate',我假设这是你正在寻找的,虽然没有更多的上下文,我不能完全确定。

from splinter import Browser
browser = Browser('phantomjs')
browser.visit('https://soundcloud.com/passionpit/sets/favorites')
songs = browser.find_by_xpath("//a[contains(@class, 'soundTitle__title')]")
if songs:
    for song in songs:
        print song.text
else:
    print "there aren't any songs"

你还会注意到,我必须做一个xpath-contains来获得你正在寻找的类描述;所以,你可能会遇到一个问题,当试图通过你使用的符号访问那个类-有一个span元素和一个锚元素,两者都包含'soundTitle__title',但据我所知,只有'a'元素有文本,我猜那就是你正在寻找。但如果你想两者都用,你可以用browser.find_by_xpath("//*[contains(@class, 'soundTitle__title')]")