2016-10-26 3 views
0

私はセレンと治療目的との間のコミュニケーションに問題があります。セレンとスクラップ用のDownloaderミドルウェアをカスタマイズするにはどうすればいいですか?

私はセレンを使っていくつかのサイトにログインしていますが、そのレスポンスを取得すると、スクレープの関数を解析して処理したいと思っています。私のミドルウェアを書くのを手伝ってもらえるように、セレンのドライバーとレスポンスはすべて治療に合格するようにしてください。

ありがとうございました!

答えて

3

それはwebdriverをして​​ミドルウェアを作成して、要求をインターセプトし、それを破棄し、それはあなたのセレンwebdriverをにそれを渡すために持っていたURLを使用するprocess_requestを使用し、非常に簡単です:

from scrapy.http import HtmlResponse 
from selenium import webdriver 


class DownloaderMiddleware(object): 
    def __init__(self): 
     self.driver = webdriver.Chrome() # your chosen driver 

    def process_request(self, request, spider): 
     # only process tagged request or delete this if you want all 
     if not request.meta.get('selenium'): 
      return 
     self.driver.get(request.url) 
     body = self.driver.page_source 
     response = HtmlResponse(url=self.driver.current_url, body=body) 
     return response 

これの欠点がありますselenium webdriveは一度に1つのURLしか処理できないため、スパイダーの並行性を取り除かなければならないということです。それについてはsettings documentation pageを参照してください。

+0

こんにちはGranitosaurus、応答のために感謝します。 私はseetting.pyに何をする必要があるのか​​、このミドルウェアにどのような名前を付けるべきか、そして私のプロジェクトに保存する場所を知りたいと思います。 ありがとうございます。 – world

+0

@worldカスタムミドルウェアを有効にする方法を見ることができます[こちら](https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#activating-a-downloader-middleware) – Granitosaurus

+0

これは不正解ですDownloader全体をバイパスしているので、このように並行処理だけではなく、さらに多くのことを壊しているので、まっすぐだと言います。調整、クッキー、ヘッダー、プロキシなどはすべて適切に設定されません.Seleniumはそれがデフォルトであれば何でも取り込みます。さらに、レスポンスオブジェクトは 'status'や' headers'のようにプロパティを正しく設定しません。 – Rejected

関連する問題