0
以下の(1)の2行を実行することで、HTML本体文字列のxpathをテストできます。スクラムスパイダーの外でスタンドアロンコードをテストする方法は?
ローカルファイルmyfile.html
のコンテンツが正確にbody
文字列の場合はどうなりますか?スタンドアロンコードをスパイダー外に実行するにはどうすればよいですか?私は以下の(2)の行におおよそ類似した何かを求めています。
scrapy shell myfile.html
はxpathsをテストしています。私の意図は、応答でいくつかのPythonコードを実行することであり、したがってscrapy shell
は欠けている(またはそうでなければ面倒です)。
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
# (1)
body = '<html><body><span>Hello</span></body></html>'
print Selector(text=body).xpath('//span/text()').extract()
# (2)
response = HtmlResponse(url='file:///tmp/myfile.html')
print Selector(response=response).xpath('//span/text()').extract()
に渡す必要があります。したがって、HtmlResponse(https://doc.scrapy.org/en/latest/topics/request-response.html#htmlresponse-objects)のurlパラメータは単に装飾的なものです。 http://もfile://もアクセスしません。 – Calaf
HtmlResponseをインスタンス化すると、スクリーピーエンジンは呼び出されません。 scrapyシェルでは、file:// HttpRequestでfetch()を呼び出すことができますが、それはエンジンを呼び出すでしょう。それは、HTMLボディ上のxpath/cssセレクタ、または非同期エンジンをテストすることに依存します。 –
urlパラメータは装飾的ではないことに注意してください.HTML本体に他のベースが見つからない場合は、ベースURLとして使用されます。例えば、 'response.urljoin()'を呼び出すときに使われます。 –