19

現在、 CasperJSと PhantomJS (両方とも優れたツールです。n1k0 と Ariya に感謝します) を使用して Google キーワード ツールをスクレイピングしようとしていますが、うまくいきません。

これが私の現在のプロセスです:

  1. Google アカウントでログインします (キーワード ツールでのキャプチャを避けるため)。
  2. [キーワード ツール] ページに移動します。
  3. 検索フォームに入力し、 を押しSearchます。

ステップ 3 で行き詰まっています。検索フォームは通常の HTML フォームではありません。使用できないためCasper#fill()、代わりにフィールドに直接アクセスしています。Word or phraseフィールドの値を変更しようとした構文の一部を次に示します。

this.evaluate(function() {

    // Trying to change the value...
    document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';
    document.querySelector('textarea.sP3.sBFB').setAttribute('value', 'MY SUPER KEYWORDS');
    document.querySelector('textarea').value = 'MY SUPER KEYWORDS';   // there's only one <textarea> on the page

    // Trying to change other attributes...
    document.querySelector('textarea.sP3.sBFB').textContent = 'MY SUPER KEYWORDS';
    document.querySelector('textarea').style.backgroundColor = 'yellow';
});

何も機能しません。フィールドに何が含まれているかを確認するために、Casper#capture()すぐに実行しています。ご覧のとおり、正しいページが表示され、ログインしていることが確認されますが、<textarea>は空です。

奇妙なことに、DOM の他の部分にアクセスできます。次のようにして、(キャプチャを参照)Advanced Options and Filtersというリンクのテキストを変更できます。___VINCE SAYS HELLO___

this.evaluate(function() {
    document.querySelector('a.sLAB').textContent = '___VINCE SAYS HELLO___';
});

PS。Google Keyword Tools のスクレイピングが TOS に違反していることは承知していますが、JavaScript/Ajax を多用するサイトをスクレイピングしようとしている人にとって、この質問は興味深いものになると思います。

4

3 に答える 3

1

なぜ結果をこすり取ろうとするのですか。Google はすでに csv ファイルを作成しています。それをダウンロードしてみてください。そのリンク セレクターは $('.gux-combo gux-dropdown-c .sJK') のようにする必要があります。それを自動化に使用しますか?

于 2012-08-21T23:09:07.843 に答える
1
document.querySelector('textarea.sP3.sBFB').value = 'MY SUPER KEYWORDS';

elt.valueテキストエリアでは使用できません。で試しましたelt.textContentか?

于 2012-08-01T14:17:34.190 に答える
0

ここで何が起こっているのか正確にはわかりませんが、ターゲティングに使用しているクラスは私にとっては異なります。OneBoxKeywordsInputPanel-inputターゲットにしようとしているテキストエリアには、2番目のクラスがありsPFB、他のクラスはありません。これらの不可解なクラスは、何らかの方法で動的である可能性があります。代わりに、よりわかりやすいクラス名を使用することをお勧めします。以下は私にとっては問題なく機能します。

document.querySelector('textarea.OneBoxKeywordsInputPanel-input')
于 2012-06-12T12:32:01.463 に答える