プロキシがまだブラックリストにないことを確認するために、レスポンスからデータを抽出する必要があります(HTTPステータスが不十分です)。予想されるように行うにはXPathまたはCSSセレクタを使用したデータを解析するDownloaderミドルウェア(スクラップを使用)
は、私がDownloaderのミドルウェアに
class TestXPathMiddleware(object):
def process_response(self, request, response, spider):
print(request.url)
print(type(response))
if (isinstance(response, HtmlResponse)):
print('HtmlResponse, XPath should be available')
print(response.encoding)
print(response.xpath('//div'))
return response
を書いたが、私のクローラーが応答していません。私は応答オブジェクトがとしてread in the docとなると期待しています。そして、私はXPathを使うためにResponseオブジェクトからHtmlResponseを作成できることを期待しています。
実際には何が起こっていますか?
ミドルウェアでキャッチされた応答の中には、Response
がありますが、その他のものは直接です。 (スパイダーの最初の解析メソッドからの応答は、Response
で、他の(より深い解析メソッドからのもの)はHtmlResponse
です。なぜですか?私は言うことができませんが、私は大好きです:)
第二に、私はありませんXPathでデータを抽出することができます。私はresponse.body
からバイトをデコードできないようです。 response.encoding
はascii
を出力しています。私はchardet
を使用して、使用するエンコーディングを決定しようとしましたが、ミドルウェアでNone
を出力し、スパイダーの解析メソッドではISO-8859-1
を出力します。どうして?もう一度、私は言うことができませんが、私は大好きです!
私を助けることができますか?ありがとう