私は、購入者の顧客からのフィードバックを含む Web サイトを解析しています。各購入者の名前とフィードバックを収集したいと思います。
私の問題は、最初のページにいくつかのフィードバックしかないことです. ボタンをクリックすると次のページが表示され、Web サイトは AJAX で応答します。AJAX 応答から Mechanize ページ オブジェクトへの新しいフィードバックを取得するにはどうすればよいですか? 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 #######################\n\n"
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}\n\n"
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>