使用 Python 抓取 Ajax
Posted
技术标签:
【中文标题】使用 Python 抓取 Ajax【英文标题】:Scraping Ajax using Python 【发布时间】:2012-05-13 12:07:36 【问题描述】:我正在尝试在此网站的表格中获取数据,该数据在页面加载后通过 jquery 更新(我有权限):
http://whichchart.com/
我目前使用 selenium 和 beautifulsoup 来获取数据,但是因为这些数据在 html 源代码中不可见,所以我无法访问它。我已经尝试过 PyQt4,但它同样没有获得更新的 html 源代码。
这些值在 firebug 和 chrome 开发人员中是可见的,那么是否有任何 python 包可以利用它并将其提供给 beautifulsoup?
我不是一个庞大的技术人员,所以理想情况下,我想要一个可以在 Python 或下一个最简单的软件类型中运行的解决方案。
我知道我可以通过专有的“screen-scraper”软件获得它,但那很昂贵。
【问题讨论】:
我并不是说它是正确的工具,但我可以在发出loadFinished
之后通过QWebView
获取更新的源代码。你用 PyQt4 做了什么尝试?
感谢阿瓦里斯。我在这里使用了代码:***.com/questions/5356948/…。你说 QwebView 会得到更新的源吗?我要输入什么代码?
好吧,那段代码也为我提供了更新的源代码。
真的吗? OP 中的代码将sitescraper.net 替换为whichchart.com,给出了返回的html 中的值?嗯,我做错了什么?
我不确定。一种可能性是在QtWebKit
设置中禁用了javascript。但是,如果您没有明确禁用它,则默认情况下它是启用的。除非您使用的是您自己构建的自定义 PyQt/Qt。
【参考方案1】:
页面正在进行 AJAX 调用以获取数据到http://whichchart.com/service.php?action=NewcastleCoal,该数据以 JSON 格式返回值。因此,您可以执行以下操作:
使用urllib通过HTTP获取数据 使用 json 库读取方法解析该数据 现在您有一个要处理的 python 对象如果您需要处理 HTML 页面内容,我建议您使用 BeautifulSoup 或 scrapy 等库
【讨论】:
谢谢马克西姆。你说得对,那行得通。但是我想要一种更机械的方法,因为我有很多网站可以从中获取数据,所以我首选的方法是使用更新的源。 @user578582 Makysm 的回应是机械的方法,解析 HTML 是一件痛苦的事情,而且很难维护,你有这些数据在 json 中可用是非常好的。 @dm03514 理想情况下,您应该使用 API,如果不可用,请尝试使用 AJAX JSON。如果没有任何其他选项可供您使用,HTML 解析是最后的手段。 JSON 也可能很难维护,如果它随着站点更新而变化(毕竟它不是官方 API 接口)以上是关于使用 Python 抓取 Ajax的主要内容,如果未能解决你的问题,请参考以下文章