それは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を参照してください。
こんにちはGranitosaurus、応答のために感謝します。 私はseetting.pyに何をする必要があるのか、このミドルウェアにどのような名前を付けるべきか、そして私のプロジェクトに保存する場所を知りたいと思います。 ありがとうございます。 – world
@worldカスタムミドルウェアを有効にする方法を見ることができます[こちら](https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#activating-a-downloader-middleware) – Granitosaurus
これは不正解ですDownloader全体をバイパスしているので、このように並行処理だけではなく、さらに多くのことを壊しているので、まっすぐだと言います。調整、クッキー、ヘッダー、プロキシなどはすべて適切に設定されません.Seleniumはそれがデフォルトであれば何でも取り込みます。さらに、レスポンスオブジェクトは 'status'や' headers'のようにプロパティを正しく設定しません。 – Rejected