在使用机械化/Nokogiri解析网页之前触发ajax请求/响应



我正在分析一个包含买家对客户反馈的网站。我想收集每个买家的名字和他或她给出的反馈。

我的问题是第一页上只给出了一些反馈。点击一个按钮就会触发下一个页面,网站会用AJAX进行响应。如何将AJAX响应中的新反馈输入到我的机械化页面对象中?我想尽可能多地点击AJAX触发按钮,所以我得到了尽可能多的反馈。

我的代码如下:

require 'mechanize'
require 'nokogiri'
log_file = "log_file.txt"
log = File.open(log_file, 'w')
www = "http://www.trustpilot.dk/review/www.fona.dk"
agent = Mechanize.new
page = agent.get(www)
reviews = page.search(".clear")
reviews.each do |r|
  doc = Nokogiri::HTML::Document.parse(r.to_html)
  log << "####################### NEW REVIEW #######################nn"
  name = r.at_css(".profileinfo a").text.strip
  log << "Customer name: #{name}n"
  rating = doc.at("//meta[@itemprop = 'ratingValue']/@content").to_s
  log << "Rating: #{rating}nn"
end
log.close

日志文件fyi将如下所示:

####################### NEW REVIEW #######################
Customer name: Hans-Oluf
Rating: 5
####################### NEW REVIEW #######################
Customer name: Jørgen
Rating: 3
####################### NEW REVIEW #######################
Customer name: Frederik
Rating: 4

AJAX触发器应该在以下源代码中:

                <div id="AjaxLoader_1" class="AjaxPager">
    <div class="AjaxPagerLinkWrapper">
        <a class="button AjaxPagerLink" href="http://www.trustpilot.dk/review/www.fona.dk?page=2">
            Vis flere anmeldelser
        </a>
    </div>
</div>
<script type="text/javascript">
    $(document).ready (function() {
        // Testing spilttest console.log("/domains/reviews?DID=767");
        // Get element right before this control
        var containerId = 'reviewContainer';
        var container = containerId == '' 
            ? $('#AjaxLoader_1').prev()
            : $($.f('#{0}', containerId));
        var pager = new Pager(
            1,
            25,
            'nextPageLoaded',
            'AjaxLoader_1',
            '/domains/reviews?DID=767',
            'page',
            '',
            container);
        });
</script>

简单。你只需要不断向发出GET请求

page = agent.get "http://www.trustpilot.dk/domains/reviews?DID=767&page=#{increment me}"

直到没有更多的数据。

相关内容

  • 没有找到相关文章