Web サイトをスクレイピングするために次のインフラストラクチャを使用しています。
Scrapy <--> Splash <--> Scrapoxy <--> web site
次のようなLuaスクリプトを使用して、スプラッシュ実行エンドポイントを介してリクエストを行っています:
function main(splash)
local host = "..."
local port = "..."
local username = "..."
local password = "..."
splash:on_request(function (request)
request:set_proxy{host, port, username=username, password=password}
end)
splash:go(splash.args.url)
return splash:html()
end
禁止を検出し、禁止されたプロキシを削除したい. Scrapoxyのドキュメントによると:
Scrapoxy は HTTP ヘッダーを応答に追加します
x-cache-proxyname
しかし、このヘッダーは に表示されませんresponse.headers。唯一のヘッダーは次のとおりです。
{b'Content-Type': b'text/html; charset=utf-8',
b'Date': b'Wed, 18 Apr 2018 19:02:21 GMT',
b'Server': b'TwistedWeb/16.1.1'}
私は何を間違っていますか?ヘッダーを正しく返すには、Lua スクリプトに何かを追加する必要がありますか?
更新:実際には、スプラッシュの問題ではないようです。HTTPie 経由で使用しても Scrapoxy が返されませんx-cache-proxyname。
http -v --proxy=https:http://<user>:<password>@<scrapoxy-server>:8888 https://<site>
GET / HTTP/1.1
User-Agent: HTTPie/0.9.9
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Host: <site>
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 28 Jun 2018 08:14:26 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: <...>
X-Powered-By: Express
ETag: W/"5a31b-faPJ7bjKH24S/3EvHU/8IoJHyxw"
Vary: Cookie, User-Agent
Content-Security-Policy: default-src https:; child-src https:; connect-src https: wss:; form-action https:; frame-ancestors https: http://webvisor.com; media-src https:; object-src https:; img-src https: data: blob:; script-src https: data: 'unsafe-inline' 'unsafe-eval'; style-src https: 'unsafe-inline'; font-src https: data:; report-uri /ajax/csp-report/
Content-Encoding: gzip