Python 具有Scrapy Splash的代理服务器

Python 具有Scrapy Splash的代理服务器,python,web-scraping,scrapy,scrapy-splash,splash-js-render,Python,Web Scraping,Scrapy,Scrapy Splash,Splash Js Render,我正在尝试让代理服务器在本地splash实例上工作。我读了好几份文件,但没有找到任何可行的例子。我注意到这就是原因。我不再得到回溯,但仍然不能使用代理飞溅。下面是新的错误消息。如果有人能帮我解决这个问题,请提前感谢。我的要求没有一个能通过Splash def parse_json(self, response): json_data = response.body load = json.loads(json_data.decode('utf-8')) dump =

我正在尝试让代理服务器在本地splash实例上工作。我读了好几份文件,但没有找到任何可行的例子。我注意到这就是原因。我不再得到回溯,但仍然不能使用代理飞溅。下面是新的错误消息。如果有人能帮我解决这个问题,请提前感谢。我的要求没有一个能通过Splash

  def parse_json(self, response):
    json_data = response.body
    load = json.loads(json_data.decode('utf-8'))
    dump = json.dumps(load,sort_keys=True,indent=2)
    LUA_SOURCE = """
    function main(splash)
        local host = "proxy.crawlera.com"
        local port = 8010
        local user = "APIKEY"
        local password = ""
        local session_header = "X-Crawlera-Session"
        local session_id = "create"

        splash:on_request(function (request)
            request:set_header("X-Crawlera-UA", "desktop")
            request:set_header(session_header, session_id)
            request:set_proxy{host, port, username=user, password=password}
        end)

        splash:on_response_headers(function (response)
            if response.headers[session_header] ~= nil then
                session_id = response.headers[session_header]
            end
        end)

        splash:go(splash.args.url)
        return splash:html()
    end
    """
    for link in load['d']['blogtopics']:
        link = link['Uri']
        yield SplashRequest(link, self.parse_blog, endpoint='execute',  args={'wait': 3, 'lua_source': LUA_SOURCE})


2017-03-29 09:26:37 [scrapy.core.engine] DEBUG: Crawled (503) <GET http://community.martindale.com/legal-blogs/Practice_Areas/b/corporate__securities_law/archive/2011/08/11/sec-adopts-new-rules-replacing-credit-ratings-as-a-criterion-for-the-use-of-short-form-shelf-registration.aspx via http://localhost:8050/execute> (referer: None)
def parse_json(self,response):
json_data=response.body
load=json.load(json_data.decode('utf-8'))
dump=json.dumps(load,sort_keys=True,indent=2)
LUA_SOURCE=“”
主功能(飞溅)
本地主机=“proxy.crawlera.com”
本地端口=8010
本地用户=“APIKEY”
本地密码=“”
本地会话\u header=“X-Crawlera-session”
本地会话\u id=“创建”
飞溅:根据请求(功能(请求)
请求:设置标题(“X-Crawlera-UA”、“桌面”)
请求:设置会话头(会话头,会话id)
请求:set_proxy{host,port,username=user,password=password}
(完)
飞溅:在响应头上(函数(响应)
如果response.headers[session\u header]~=nil,则
session\u id=response.headers[会话\u头]
结束
(完)
splash:go(splash.args.url)
返回splash:html()
结束
"""
对于加载中的链接['d']['blogtopics']:
link=link['Uri']
生成请求(链接,self.parse_blog,endpoint='execute',args={'wait':3,'lua_source':lua_source})
2017-03-29 09:26:37[scrapy.core.engine]调试:爬网(503)(参考:无)

问题似乎是由Crawlera中间件引起的。没有对请求的处理。它试图通过代理到达我的本地主机。

看起来像是一个公开问题:你说得对,我的支持票上刚刚确认了一个bug。希望很快就能修好。我不想放弃splash。@eusid我认为crawlera需要更多的自定义splash代码-你能检查一下这里的示例吗?我从这个解决方案开始,但为了简单起见,把它缩小到了这个范围。你知道需要什么吗?设置标题?使用相同结果的精确代码。有没有人能用这个?503错误。我真的很想使用splash,但考虑放弃使用常规webkit。必须有人知道如何做到这一点。还要添加注释,代理在主请求上工作,但在许多浏览器子请求上失败,因为crawlera是基于请求的,每个请求实际上是多个请求。