2011-11-10 19 views
0

我试图使用Python在基于ajax的网站(如www.snapbird.org)上检索查询结果。由于它不显示在页面源中,我不知道如何继续。 我是一个Python新手,因此如果我能够在正确的方向得到一个指针,那将是非常好的。 如果这更容易,我也愿意接受其他一些处理任务的方法使用Python从基于AJAX的站点提取信息

回答

0

这将会很复杂,但作为开始,请找到在处理AJAX请求时调用的URL。你可以直接在Python程序中调用它并解析输出。

0

您也可以将chrome/firefox配置为HTTP代理,然后使用代理登录/提取必要的内容。我使用python代理来修改/保存/记录基于内容类型或URI的请求/内容。

对于其他项目,我已经写了特定网站的JavaScript小书签其轮询新数据,然后将它发送到我的服务器(通过动态创建两个表单和iframe,并设置myform.target=myiframe;

其他JavaScript脚本/书签工具模拟一个用户与网站进行交互,所以不用每隔几秒轮询一次javascript就会自动点击按钮和表单提交等等。当然,这些脚本总是非常特定于站点,但它们对我来说非常有用,特别是在遍历所有脚本时给定搜索的分页结果。

这里是一个精简版的“pag” (inate)“结果并准备将数据发送到我的服务器(然后使用BeautifulSoup进一步解析它)。特别是这是为Youtube的发送/收件箱邮件而设计的。

var tables = []; 
function process_and_repeat(){ 
    if(!(inbox && inbox.message_pane_ && inbox.message_pane_.innerHTML)){ 
     alert("We've got no data!"); 
    } 
    if(inbox.message_pane_.innerHTML.indexOf('<table') === 0) 
    { 
     tables.push(inbox.message_pane_.innerHTML); 
     inbox.next_page(); 
     setTimeout("process_and_repeat()",3000); 
    } 
    else{ 
     alert("Fininshed, [" + tables.length + " processed]"); 
     document.write('<form action=http://curl.sente.cc method=POST><textarea name=sent.html>'+escape(tables.join('\n'))+'</textarea><input type=submit></form>') 
    } 
} 

process_and_repeat(); // now we wait and watch as all the paginated pages are viewed :) 

这是一个简化的例子,没有任何花哨的iframes/non-essentials,这只是增加了复杂性。

除了Liam的说法,Selenium也是一个很好的工具,它有助于我的各种刮擦需求。如果您愿意,我会很乐意帮助您。

0

一个简单的解决方案可能是使用像Mechanize这样的浏览器。因此,您可以浏览网站,关注链接,进行搜索以及使用带有用户界面的浏览器执行的几乎所有操作。

但对于一个非常sepcific工作,你甚至可能不会需要这样的库,你可以使用urlliburllib2 Python库进行连接,并读取响应...您可以使用Firebug看到搜索的数据结构和应对机构。然后用urllib做出相关参数的请求...

举一个例子...

我与joyvalencia搜索和检查请求的URL与萤火虫看到:

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=joyvalencia&count=100&page=2&include_rts=true&callback=twitterlib17083330 

所以调用此URL以urllib2.urlopen()将与制作上Snapbird查询相同。响应体是:

twitterlib17083330([{"id_str":"131548107799396357","place":null,"geo":null,"in_reply_to_user_id_str":null,"coordinates":....... 

当您使用urlopen()和读取响应,上线就是你......然后你就可以使用json库蟒读取数据,并将其解析到Python的数据结构...