問題タブ [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 スパイダーで allowed_domains に動的に追加する
スパイダーの開始時に小さなリストで始まるスパイダーがありallowed_domains
ます。パーサー内からスパイダリングが続行されるため、このホワイトリストにドメインを動的に追加する必要がありますが、後続のリクエストがまだフィルタリングされているため、次のコードはそれを達成できません。allowed_domains
パーサー内で別の更新はありますか?
python - ScrapyのCSV結果のフォーマット
Webサイトをスクレイプし、結果をCSVファイルに保存してフォーマットしようとしています。ファイルを保存することはできますが、出力とフォーマットに関して3つの質問があります。
すべての結果は、複数の行ではなく1つのセルに存在します。アイテムをリストしてリストに表示するときに使用するのを忘れているコマンドはありますか?
['u...
各結果の前にあるを削除するにはどうすればよいですか?(私は検索してその方法を確認しましたが、そうではprint
ありませんreturn
)特定のアイテムの結果にテキストを追加する方法はありますか?(たとえば、各取引リンクの結果の先頭に「http://groupon.com」を追加できますか?)
python - XPath: 現在のノード属性によって現在および次のノードのテキストを選択する
これが繰り返しの質問である場合は、申し訳ありませんが、SOまたは他の場所で、必要なものを処理していると思われる別の質問が見つかりません。これが私の質問です:
このscrapy
Webページから情報を取得するために使用しています。明確にするために、以下はその Web ページのソース コードのブロックです。これは私にとって興味深いものです。
そのページのほとんどすべてのコードは、上記のブロックのように見えます。
このすべてから、次のものを取得する必要があります。
- ANT101H5 生物人類学と考古学入門
- 除外: ANT100Y5
- 前提条件: ANT102H5
問題は、それExclusion:
が a の中<span class="title2">
にANT100Y5
あり、次の の中にあること<a>
です。
このソース コードから両方を取得することはできないようです。現在、次のようなコードを取得しようとする (そして失敗する) コードがありますANT100Y5
。
「これに完全に答えるこの他のSOの質問が表示されないために盲目である」場合でも、これに関する助けをいただければ幸いです(その場合、私はこれを閉じるために投票します)。私は本当に頭がおかしいです。
前もって感謝します
編集: @Dimitre によって提案された変更後に元のコードを完成させる
私は次のコードを使用しています:
これにより、次の結果が得られます。
これは私が必要とする出力ではありません。私は何を間違っていますか?前述のように、このスクリプトをthisで実行していることに注意してください。
python - 実行時にPython正規表現を生成して、「n」から無限までの数値に一致させます
私はscrapyを使用してWebサイトをクロールし、そこからデータを抽出しています。scrapyは正規表現ベースのルールを使用して、ページを解析する必要があるか、リンクをたどる必要があるかを確認しています。
スパイダーに再開機能を実装しているので、最後にアクセスしたページからクロールを続けることができます。このため、スパイダーの起動時にデータベースから最後にたどったリンクを取得します。
私のサイトのURLはのようhttp://foobar.com/page1.html
に見えるので、通常、このようなすべてのリンクをたどるルールの正規表現は、のようになります/page\d+\.html
。
しかし、たとえば15ページ以上に一致するように正規表現を作成するにはどうすればよいですか?また、事前に開始点がわからないので、実行時にこの正規表現を生成するにはどうすればよいですか?
python - XPath: 現在のノード属性によって現在および次のノードのテキストを選択する
まず、これは私の前の質問からのスポーンです。質問が以前に適切に定義されていないと感じたため、元の投稿で回答を受け入れた人からそうするように勧められたため、これを再度投稿しました。試行 2 は次のとおりです。
この Web ページから情報を取得しようとしています。明確にするために、以下はページソースのブロックの選択です:
上記のサンプル ブロックから、次の情報を抽出したいと思います。
ANT101H5 Introduction to Biological Anthropology and Archaeology
Exclusion: ANT100Y5
Prerequisite: ANT102H5
Webページからそのようなすべての情報を取得したいと思います(一部のコースには、追加でリストされている「相互必須条件」がある場合や、前提条件/相互条件または除外条件がまったくリストされていない場合があることに注意してください)。
このタスクに適した xpath 式を書こうとしていますが、うまくできていないようです。
これまでのところ、ディミトレ・ノヴァチェフの助けを借りて、次の表現を使用することができました。
ただし、次の出力が生成されます。これは、ページの最初のコースの情報のみを取得しているようです。
明確にするために、この出力は、最初のコースに関する正しい情報を取得する場合にのみ正しいものです。その Web ページにリストされているすべてのコースについて、このような正しい情報が必要です。
私はとても近づいていますが、その最後のステップを理解することができないようです.
助けていただければ幸いです...事前に感謝します
python - PythonのScrapy Crawlerはリンクをたどることができませんか?
Pythonのscrapyツールを使ってPythonでクローラーを書きました。以下はpythonコードです:
ただし、リンクをたどる代わりに、スローされるエラーは次のとおりです。
誰かが私に何が起こっているのか説明してもらえますか? これはドキュメントに記載されている内容であり、許可フィールドを空白のままにしているので、それ自体がデフォルトで True に従う必要があります。では、なぜエラーが発生するのでしょうか? クローラーを高速化するために、どのような最適化を行うことができますか?
python - PythonとScrapyを使用した再帰的なクロール
私はscrapyを使用してサイトをクロールしています。このサイトには、ページごとに15のリストがあり、[次へ]ボタンがあります。パイプライン内のすべてのリストの解析が完了する前に、次のリンクのリクエストが呼び出されるという問題が発生しています。これが私のスパイダーのコードです:
これらの線が問題です。前に言ったように、スパイダーが現在のページをクロールし終える前に実行されています。サイトのすべてのページで、これにより、私のリストの15のうち3つだけがパイプラインに送信されます。
これは私の最初のスパイダーであり、私の側の設計上の欠陥である可能性がありますが、これを行うためのより良い方法はありますか?
python - Scrapy での CSV エクスポートの変更
非常に単純なものが欠けているようです。私がやりたいのは;
、代わりにCSVエクスポーターで区切り文字として使用することです,
。
CSVエクスポーターがkwargsをcsvライターに渡すことは知っていますが、これを区切り文字に渡す方法がわかりません。
私は自分のスパイダーを次のように呼んでいます:
python - サイトをスパイダーして解析しようとすると、scrapy がエラーをスローするのはなぜですか?
次のコード
次のエラーをスローします
コールバックを「parse」に変更し、関数を「parse」に変更すると、エラーは発生しませんが、何もスクレイピングされません。誤って parse メソッドをオーバーライドしている可能性があると考えて、「parse_items」に変更しました。リンクエクストラクタの設定が間違っているのでしょうか?
私がやりたいことは、CATEGORY ページの各 ITEM リンクを解析することです。私はこれを完全に間違っていますか?
python - 2回実行するとクローラーが重複しますか?
Python でクローラー フレームワーク「scrapy」を使用し、pipelines.py ファイルを使用してアイテムを json 形式でファイルに保存します。これを行うためのコードは import json の下に示されています
問題は、クローラーを 2 回実行すると (たとえば)、ファイルに重複したスクレイピング アイテムが表示されることです。最初にファイルから読み取り、次にデータを書き込む新しいデータと一致させることでそれを防止しようとしましたが、データはファイルはjson形式だったので、json.loads()関数でデコードしましたが、機能しません:
これを行う方法を提案してください。
注: 別のリンク セットをクロールする可能性があるため、ファイルを「追加」モードで開く必要があることに注意してください。ただし、同じ start_url でクローラーを 2 回実行すると、同じデータがファイルに 2 回書き込まれます。