問題タブ [scrapy]
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.
python - Scrapyを再帰的に使用してWebサイトからWebページをスクレイプする
私は最近Scrapyを使い始めました。いくつかのページ(約50)に分割された大きなリストからいくつかの情報を収集しようとしています。リストの最初のページを含め、最初のページから必要なものを簡単に抽出できますstart_urls
。ただし、これらの50ページへのすべてのリンクをこのリストに追加したくありません。もっとダイナミックな方法が必要です。Webページを繰り返しスクレイプする方法を知っている人はいますか?誰かがこれの例を持っていますか?
ありがとう!
scrapy - Scrapyのプロジェクトで複数のスパイダーを使用する
同じプロジェクト内で複数のスパイダーを一緒に使用できるかどうか知りたいです。実は2匹の蜘蛛が必要です。最初のものは、2番目のクモがこすり落とす必要があるリンクを収集します。どちらも同じウェブサイトで動作するため、ドメインは似ていますが、可能ですか?はいの場合、例を挙げていただけますか?ありがとう
python - スクレイピーを使用してヤフーグループをスクレイピングする際の問題
私は Web スクレイピングが初めてで、Python で記述されたスクレイピング フレームワークであるScrapyの実験を始めたばかりです。私の目標は、メッセージ アーカイブを取得するための API やその他の手段を提供していない古い Yahoo グループをスクレイピングすることです。Yahoo グループは、アーカイブを表示する前にログインする必要があるように設定されています。
私が達成する必要がある手順は次のとおりです。
- ヤフーにログイン
- 最初のメッセージの URL にアクセスしてスクレイピングする
- 次のメッセージなどに対して手順 2 を繰り返します。
上記を達成するために、スクレイピースパイダーのラフアウトを開始しました。これが、これまでのところです。私が観察したいのは、ログインが機能し、最初のメッセージを取得できることだけです。これだけの作業が完了したら、残りを終了します。
ただし、スパイダーを実行すると、スパイダーがログインして最初のメッセージのリクエストを発行することがわかります。ただし、scrapy からのデバッグ出力に表示されるのは 3 つのリダイレクトだけで、最終的に最初に要求した URL に到達します。しかし、scrapy は私のparse_msg()
コールバックを呼び出さず、クロールは停止します。スクレイピー出力のスニペットは次のとおりです。
私はこれを理解することができません。Yahoo がスパイダーをリダイレクトしているように見えますが (認証チェックのためでしょうか?)、最初にアクセスしたかった URL に戻ってきたようです。しかし、scrapy はコールバックを呼び出さず、データをスクレイピングしたり、クロールを継続したりする機会がありません。
何が起こっているのか、および/またはこれをさらにデバッグする方法について誰か考えがありますか? ありがとう!
python - Scrapy-Cookie/セッションを管理する方法
CookieがScrapyとどのように連携するか、およびそれらのCookieをどのように管理するかについて少し混乱しています。
これは基本的に私がやろうとしていることの単純化されたバージョンです:
ウェブサイトの仕組み:
Webサイトにアクセスすると、セッションCookieを取得します。
あなたが検索をするとき、ウェブサイトはあなたが検索したものを記憶しているので、あなたが結果の次のページに行くようなことをするとき、それはそれが扱っている検索を知っています。
私のスクリプト:
私のスパイダーの開始URLはsearchpage_urlです。
検索ページはによって要求されparse()
、検索フォームの応答はに渡されますsearch_generator()
search_generator()
次に、と検索フォームの応答yield
を使用した多数の検索要求。FormRequest
これらの各FormRequestとそれに続く子リクエストには、独自のセッションが必要であるため、独自の個別のcookiejarと独自のセッションcookieが必要です。
クッキーのマージを停止するメタオプションについて説明しているドキュメントのセクションを見てきました。それは実際にはどういう意味ですか?それは、リクエストを行うスパイダーが、その存続期間中、独自のcookiejarを持つことを意味しますか?
クッキーがスパイダーごとのレベルにある場合、複数のスパイダーがスポーンされたときにどのように機能しますか?最初のリクエストジェネレーターのみが新しいスパイダーを生成し、それ以降はそのスパイダーのみが将来のリクエストを処理するようにすることは可能ですか?
複数の同時リクエストを無効にする必要があると思います。そうしないと、1つのスパイダーが同じセッションCookieで複数の検索を行い、将来のリクエストは最後に行われた検索にのみ関連しますか?
私は混乱しています、どんな説明も大いに受け取られるでしょう!
編集:
私が今考えたもう1つのオプションは、セッションCookieを完全に手動で管理し、ある要求から別の要求に渡すことです。
これは、Cookieを無効にしてから、検索応答からセッションCookieを取得し、それを後続の各要求に渡すことを意味すると思います。
これはあなたがこの状況ですべきことですか?
python - Scrapy をプロジェクトに入れて Crawl コマンドを実行しようとしています
私は Python と Scrapy が初めてで、Scrapy のチュートリアルを進めています。DOS インターフェイスを使用して次のように入力することで、プロジェクトを作成できました。
このチュートリアルでは、後で Crawl コマンドについて言及しています。
しかし、実行しようとするたびに、これは正当なコマンドではないというメッセージが表示されます。さらに調べてみると、プロジェクトの中にいる必要があるように見えますが、それがわかりません。startproject で作成した「dmoz」フォルダにディレクトリを変更しようとしましたが、Scrapy がまったく認識されません。
明らかな何かが欠けていると確信しており、誰かがそれを指摘できることを願っています。
python - Scrapy: 接続が拒否されました
Scrapy のインストールをテストしようとすると、次のエラーが表示されます。
バージョン:
- スクレイピー 0.12.0.2536
- パイソン 2.6.6
- OS: Ubuntu 10.10
編集:ブラウザ、wget、telnet google.es 80でアクセスでき、すべてのサイトで発生します。
python - Scrapy: アイテムをスキップして実行を続行する
私はRSSスパイダーをやっています。現在のアイテムに一致するものがない場合、現在のノードを無視してスパイダーの実行を続行したい...これまでのところ、次のようになっています。
(info は、以前に xpath からサニタイズされた文字列です...)
しかし、私はこの例外を受けています:
クモ
では、このノードを無視して実行を続行するにはどうすればよいでしょうか?
python - Scrapy:RSSコントロールpub_date
RSSスパイダーをやっています。最終クロール日を制御するにはどうすればよいですか?
今私が考えていたのはこれです:
- クロールした最後のpub_dateを制御ファイルに入れます。
- 次に、クロールが開始されると、最後のpub_dateが新しいpub_datesと照合されます。新しいアイテムがある場合はクロールを開始し、ない場合は何もしません。
他の誰もがこれをどのように解決しますか?
python - スクレイピングする各フィールドを明示的に定義せずにデータをスクレイピングする
ページ上の個々のフィールドを定義せずに、(Python Scrapyライブラリを使用して)データのページをスクレイプしたいと思います。id
代わりに、要素のをフィールド名として使用して動的にフィールドを生成したいと思います。
最初は、これを行うための最善の方法は、すべてのデータを収集し、すべてのデータを取得したら出力するパイプラインを用意することだと考えていました。
次に、アイテムのパイプラインにデータを渡す必要があることに気付きましたが、必要なフィールドがわからないため、アイテムを定義できません。
この問題に取り組むための最善の方法は何ですか?
python - スクレイピーでラジオボタンを選択
スクレイピーでラジオボタンを選択するにはどうすればよいですか?
私は次のものを選択しようとしています