私は20以上のリストから製品情報(価格、場所、名前など)を集めるWebスクレイピングプロジェクトに取り組んでいます。ウェブサイト...これまで私はジェネリックMasterSpider(ここで議論されているものに似ています:Creating a generic scrapy spider)を作成しました。そこから、サイトの特定のアーキテクチャに応じて継承してオーバーライドします。スケーラブルなスパイダーを開発する - 要素のプロパティでXpathを抽出する
しかし、本質的に多くのコードを繰り返して、このプロジェクトをスケーラブルにしたかったので、私はMaterSpiderを他のウェブサイトに拡張できるようにして、start_urlのような最小限の議論で理想的にインスタンス化しました。言い換えれば、ドメイン間で一貫しないXpathで要素を特定する代わりに、htmlタグ属性値/テキスト値を探しています。
これは、スタートページ(通常リンクのカテゴリを含む)からカテゴリのリンクを特定するなどの一般的で一貫性のあるターゲットでは問題ありませんが、商品名、価格などを見つけるのに欠けています。 @class = aまたはbまたはc/contains(。、 'a')やcontains(。、 'b')などのようなxpath条件のリストを作成しなければならないという目的は敗北します。
...私はまた、私はしなければならないかもしれクモをインスタンス化するためにいくつかのXPath条件を渡すことができます実現が、私は可能な限り、これはのように使いやすく、拡張可能にすることを好むだろうマイアイデアは個々の製品ページを解析する前に、私が望む情報を探すダミー要求を発行し、実際に情報のxpathを識別するために後方に働きます。
私は要素のXパスを抽出する方法についての良いアイディアがあれば、それが含むタグの値のリスト、またはテキストの一致を言うことができますか?しかし、それは解決策よりもバンド援助のほうが大きく、それほどスケーラブルではありません。これを行うためにセレンまたはパーサーのようなものを使用する必要がある場合は、これもオプションです...
本当にアイデアやフレッシュな見通しがあります。
ありがとうございます!
そうすれば、「ヒューリスティックを使って必要な情報を抽出しようとする」より具体的にすることができます...パースジェネリッククラスのように、xpathなしで情報をどのように抽出していますか?特定の属性値/テキストを含むhtmlタグを探しているだけですか、それよりも複雑です – bobsaget123
これはドメイン固有のもので、多くのテスト/試行錯誤があります。たとえば、記事のタイトルを抽出するには、いくつかの場所(タイトルタグ、og:タイトルメタ、いくつかのxpaths、いくつかのタグを試してみる)を調べ、実際に正しいタイトルがあると信じるべきときのルールを設定します。 –
あなたのニーズに合った何かで私の答えを編集し、良いヒューリスティックスよりも達成するのが難しい/難しいです –