問題タブ [jsdom]
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.
javascript - Node Jsdom Scrape Google の逆画像検索
画像 URL を指定して、類似画像の URL のリストをプログラムで検索したいと考えています。無料の画像検索 API が見つからないため、Google のSearch by Imageをスクレイピングしてこれを実行しようとしています。
画像の URL がある場合、たとえばhttp://i.imgur.com/oLmwq.pngと入力してから、 https://www.google.com/searchbyimage?& image_url=http://i.imgur.com/oLmwqに移動します。 .pngは、関連する画像と情報を提供します。
jsdom.env
上記の URL からブラウザが取得する HTML を生成するにはどうすればよいですか?
これが私が試したことです(CoffeeScript):
HTML が必要なものと一致していないことがわかります。これは Jsdom の HTTP ヘッダーの問題ですか?
javascript - node.js と jquery によるスクレイピング
ノードとjqueryを使用したスクレイピングに関するこのチュートリアルに従おうとしています-
http://net.tutsplus.com/tutorials/javascript-ajax/how-to-scrape-web-pages-with-node-js-and-jquery/
その中には、次のようなコードがあります -
window.Jquery または window.$ をコンソール ログに記録すると、どちらも未定義ですが、jsdom が jquery をページに埋め込む必要があるためではないでしょうか。なぜそれが起こらないのですか?
node.js - Node.jsでWebスクレイピングを効率的に行う方法は?
ショッピングサイトExpress.comからいくつかのデータを取得しようとしています。これは、画像、価格、タイトル、色を含む多くの製品の1つです。
私が行った非常に素朴でエラーが発生しやすいアプローチは、最初にすべての価格、画像、タイトル、色を取得することです。
次に、 node.jsのjsdomまたはcheerioスクレイピングライブラリを使用して抽出されたDOMからのデータを配列に入力します。(この場合はCheerio)。
最後に、価格、タイトル、画像、色が一致するという仮定に基づいて、製品オブジェクトを作成します。
この方法は時間がかかり、エラーが発生しやすく、非常にアンチドライです。$('.cat-thu-product')
一度に1つのforループを使用して、1つの製品から関連情報を抽出できればいいのにと思いました。
しかし、jsdomまたはcheerioでDOMをトラバースしようとしたことがありますか?誰もがそれをどのように理解できるのかわかりません。誰かが、$('.cat-thu-product')
すべての関連情報を含むdiv要素を取得し、必要なデータを抽出することによって、この提案されたスクレイピング方法をどのように使用するかを示すことができますか?
または、おそらくこれを行うためのより良い方法がありますか?
ember.js - Brunch、JSDom : オブジェクト [ jsdom NodeList ]: 3 つの項目があり、メソッド 'map' がありません
Ember、Brunch、および JSDom でヘッドレス テストを動作させようとしています。アプリを生成するために ember-brunch-skeleton を使用しています。
https://github.com/fuseelements/ember-brunch-skeleton
すべての依存関係がインストールされています。
「ブランチ テスト」を実行しようとすると、次のエラーが表示されます。ここで何か基本的なことが欠けているようですが、node.js/jsdom/mocha などを使用するのはこれが初めてです。何が欠けていますか?
node.js - Node.js Jsdom が [エラー: ソケット ハングアップ] コードを返す: 'ECONNRESET' }
nodejs で jsdom を使用しようとすると、次のエラーが発生します。
[エラー: ソケットがハングアップしました] コード: 'ECONNRESET' }
NodeJs v0.8.20、Ubuntu 12.04 の使用
node.js - AppFog では Express でエラーが発生しましたが、ローカルではエラーが発生しました
AppFog でアプリをホストするとエラーが発生します。50 行目、JSDOM を呼び出すと... ローカルでは問題が発生しません。リモートで機能しない理由がわかりません...
私のコード(ローカルで動作):
私のエラー (AppFog で - サポートにリクエストを送信しました):
AppFog にログオンします。
Cheerio で編集:
jquery - Node.js クローラーには、html ではなく、バッファーとして result.body があります。
https://github.com/sylvinus/node-crawlerからの非常に単純なサンプルコードがあります
出力は
Url を に変更するとc.queue("http://bing.com")
、html テキストを取得できます。この動作は Web サイトによって異なり、私には理解できません。
に変更console.log(result.body);
するとconsole.log($('body').text());
、google.com サイトから、ブラウザに送信されたものとは異なる奇妙なテキストが返されました。
Url をPinterest.comなどの他の Web サイトに変更すると、 jsdom.js自体でエラーが発生し始めました。
これはコード自体のエラーだと思いますが、そうでない場合は、誰かが私の間違いを指摘するのを手伝ってくれますか?
注: jQuery ファイルの場所で動作するようにjQueryUrl
、param が追加される場合があります。new Crawler({})
javascript - jsdom を使用した複数行の属性
jsdom で複数行の属性の値を取得することは可能ですか (Node.js+JQuery で使用します)?
スクレイピングするサイトには、次の HTML が含まれています。
残念ながら、これはに解析されます
そのため、たとえば JQuery: を介して title と href 属性を抽出できません$("a").attr("data-title")
。
何か案は?
node.js - Azure 上の JSDom (ネイティブ Node.js モジュール)
ネイティブ モジュールContextifyに依存しているため、JSDom に依存する nodejs アプリを Azure で動作させるのに問題があります。Azureはネイティブ モジュールのコンパイルを提供していないことを理解しています。
ただし、Azureのドキュメントによると
Windows Azure クラウド サービスは、アプリケーションの一部として展開される node_modules フォルダーに依存しているため、インストールされたモジュールの一部として含まれるネイティブ モジュールは、Windows 開発システムにインストールおよびコンパイルされている限り、クラウド サービスで動作するはずです。
npm のインストール中にコンパイルされるため、開発ボックスではすべて正常に動作しますが、コンパイルされたバージョンを提供しているときに Azure で動作しない理由がわかりません。Windows dev ボックスで動作する場合、コンパイルは明らかに成功しています。ローカル git リポジトリから azure フォームにデプロイするので、コミット時にコンパイル済みファイルが除外されているのではないかと考えています。
node.js - jsdomと$(document).ready
ページを実行すると、ページスクリプトjsdom
の$(document).ready
ブロックが実行されていないようです。
これがhtmlです:
とcodez:
および出力:
私は何が間違っているのですか?
満足のいく不条理なstackoverflow比率に詳細を追加します。
[解決]:
私を正しい答えに導いてくれてありがとうデイブ。
完全なjsdomの答えは次のようになると思います。jsdom.jQuerifyを使用せず、スクリプトタグを追加して、ページ内スクリプトの上のページにjQueryをロードします(ブラウザでページをロードするために必要になるため)。
html:
コード: