問題タブ [cheerio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jquery - Cheerio を使用した不適切な形式の HTML の正規表現検索リーフ ノード
下のような形式の悪い HTML があり、特定の正規表現に一致するテキストを持つリーフ ノードを (それ以上の子なしで) 取得したいと考えています。
私は、基本的にjQueryトラバーサルAPIを実装するcheerioを使用しています。私がこれまでに試したこと:
/li>:contains
セレクターは正規表現をサポートしておらず、大文字と小文字を区別しないテキストもサポートしていません。
/li>each
、次に標準の JavaScriptmatch
:
/li>children
ですが、HTML 内のすべてのテキストである 1 つの文字列を出力します。
問題は、ネストされた子の数が可変であり、何らかの理由ですべての要素を取得するという事実にあると思いますが、それぞれにたくさんの子があり、それらを反復処理することはできませんでしたテキストをテストします。
可変的にネストされた要素がたくさんあることがわかります。通常.find()
は、 内のすべての要素を検索するのに機能します<body>
が、この場合はまったく機能しません.find()
。.filter()
この HTML のテキストを正規表現検索する方法について何か考えはありますか?
HTML の完全な例は、ここにあります。
node.js - ノード js チェリオ xml
私は以下のコードを持っており、取得するために正常に動作しています:
しかし、同じページから以下の「id」以降の値を取得したいのですが、取得できません!
ここに私が現在持っているコードがあります
任意の支援をいただければ幸いです。
node.js - var を url に挿入し、ノード js で、cheerio/request でフォローします
元の URL から変数を取得し、それを 2 番目の URL に挿入して、その URL にアクセスし、そこから変数にアクセスしようとしています。2 つの問題があります。
問題 1: 'myurl' 変数が値を返す
つまり、「myid」変数を使用していません。
問題 2: DOM にアクセスしたいので、「myurl」URL をたどるにはどうすればよいですか? 「myurl」に対して別の「リクエスト」を行う必要がありますか?
これまでの私のコードは次のとおりです。
node.js - チェリオとリクエストを使用したノードjsの増分および非増分URL
次の方法で、cheerio と request を使用してページからデータをスクレイピングしようとしています。
- 1) URL 1a ( http://example.com/0 )にアクセスします。
- 2) URL 1b を抽出 ( http://example2.com/52 )
- 3) URL 1b に移動
- 4) いくつかのデータを抽出して保存する
- 5) URL 1a+1 に移動します ( http://example.com/1、それを 2a と呼びましょう)
- 6) URL 2b を抽出 ( http://example2.com/693 )
- 7) URL 2b にアクセス
- 8)一部のデータを抽出して保存するなど...
私はこれを行う方法を見つけるのに苦労しています(注意してください、私はノードjsとcheerio/requestに精通しているだけですが、このタスクはエレガントではない可能性が高いため、これを行うための代替ライブラリや言語を探していません、申し訳ありません) . これがどのように機能するかさえ考えられないので、何かが足りないと思います。
編集
これを別の方法で試してみましょう。コードの最初の部分は次のとおりです。
最初に返されたページは次のようになります
上記の URL では、s=0、s=1 など、「合計」回数を段階的に増やす必要があります。「id」は、2 番目のリクエストで以下の URL に入力する必要があります。
たとえば、最初のリクエストで返された id="189231549" を使用すると、2 番目に返されるページは次のようになります。
したがって、私の質問は、これら 2 つの部分 (ループ) を結び付けて結果を得るにはどうすればよいか (約 70000 ページをダウンロードして解析する) ということです。
Node.js の JavaScript でこれをコーディングする方法がわかりません。私はJavaScriptが初めてです
javascript - チェリオ $ 変数が他のセッションに影響を与えないのはなぜですか?
node.jsでcheerioモジュールを使用しています。そして、「var」キーワードなしで関数で宣言された変数はグローバルスコープであることを知っています。
今日、cheerio が http 本体を $ 変数にロードするときに、変数がキーワード 'var' を使用していないことに気付きました。私はそれで何の問題もありません。しかし、突然私は混乱しました。私の意見では、変数 $ はグローバル スコープであるため、サーバーに接続するすべてのセッションは同じ変数を共有する必要があります。
私はJavaScriptの概念が間違っていると思います。この問題を解決させてください。
javascript - Web スクレイピングの基本
私は Web ページのスクレイピングを試しています。これを使って興味深いことができる可能性がたくさんあると思います。私は必要なものを調査するのに数時間を費やし、「request」モジュールと「cheerio」モジュールで node.js を使用してスクレイプを実行することにしました。
最初のプロジェクトでは、このランダム センテンス ジェネレーター サイトからランダムなセンテンスを取得しようと考えました: http://watchout4snakes.com/wo4snakes/Random/RandomSentence
マークアップは比較的単純に見えますが、私が興味を持っているのは次の部分です。
したがって、必要なビットはスパンにあります(実際のページを調べると明らかに異なります)、次のJavascriptファイルを作成し、ノードで実行しました:
通知を受け取ったので、いくつかのチェックを行い、ページのデータを正しくスクレイピングしたことを確認します。だから今私がしたいのは、#result
IDフィールドのテキストを選択することだけです。ただし、空白が与えられるだけです。実際、cheerio モジュールにその領域の実際のマークアップを出力させる<span ID="result"></span>
と、内部にランダムな文がない状態で与えられます。
私の最初の推測では、ランダム センテンス スクリプトの実行が完了する前に、ノードがマークアップをスクレイピングしていると思われます。しかし、何が起こっているのかを診断する方法がわからないので、誰か考えがありますか?
javascript - node.jsのリクエストブロックからドキュメントに書き込み(印刷)するにはどうすればよいですか
サーバーの実行中にyahooからライブデータを取得し、それをコンソールとブラウザーに出力するサーバー側コードをいくつか書きましたが、問題は、ドキュメントに出力する関数が見つからないことですリクエストブロック。これは私のコードです:
これは、コンソール Files\node.js\node_modules\YfTemp.js:49 >>; で得たエラーです。SyntaxError: Module._compile での入力の予期しない終了 Object.Module._extensions..js での Module.load で Function.Modul._load で Function.Module.runMain で strartup で node.js:906:3
javascript - Cheerio Web ページ スクレーパーを使用したナビゲーション html
Node.js の Cheerio を使用してスクレイプをスクリーニングする方法に関するこのチュートリアルに従っています。ページ全体をダウンロードし、Javascript を使用して必要な情報を抽出するのに 2 秒かかります。実際に Cheerio を使用していますが、Cheerio で HTML をナビゲートするのが今は理解できません。数字「2」「blind-cow-white-number」を抽出するにはどうすればよいですか?
HTMLは次のとおりです。
チェリオでこれを達成するにはどうすればよいですか? 代わりに xpath を使用できる node.js 用の Web スクリーン スクレーパーはありますか?