Scrapy+phantonjs 爬去速度过慢?

scrapy 运行日志

**************ProxyMiddleware not pass************171.38.66.23:9999
2017-01-26 23:05:38 [selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:57234/wd/hub/session {"desiredCapabilities": {"browserName": "phantomjs", "version": "", "platform": "ANY", "javascriptEnabled": true}, "requiredCapabilities": {}}
2017-01-26 23:05:38 [selenium.webdriver.remote.remote_connection] DEBUG: Finished Request
2017-01-26 23:05:38 [selenium.webdriver.remote.remote_connection] DEBUG: POST http://127.0.0.1:57234/wd/hub/session/e5c0aeb0-e3d8-11e6-a629-15e39efe8c5a/url {"url": "Matweb Engineering Materials List", "sessionId": "e5c0aeb0-e3d8-11e6-a629-15e39efe8c5a"}

phantonjs 中间件代码:

def process_request(self, request, spider):
        driver = webdriver.PhantomJS(executable_path=r"/Users/apple/phantomjs-2.1.1-macosx/bin/phantomjs")
        driver.get(request.url)
        body = driver.page_source
        print ("访问"+request.url)
        return HtmlResponse(driver.current_url, body=body, encoding='utf-8', request=request)

每次执行到selenium.webdriver.remote.remote_connection 。 都会卡上20s, 请问这是为什么?

阅读 5.8k
3 个回答

最近我在试着爬取淘宝搜索结果,也是同样的问题,请教了一下我的一位前辈。在proess_request方法的第一行打印一下时间戳,发现url传入这里的时候似乎是以同步的方式逐个发送过来的,而这里返回了HtmlResponse,意味着请求将不会进入下载器(Downloader)。因此有可能这里的下载并不是以异步的方式处理的,如果希望以异步的方式进行处理,可能需要自己手写异步方法。

速度慢的原因有很多,电脑配置,网络原因等等。
如果想要提高速率,我们可以设置相关参数,使其不加载我们不需要的资源,比如图片,视频等等这些文件比较大的文件。如果你不想加载这些数据,可以进行如下设置

    #不加载图片
    dcap["phantomjs.page.settings.loadImages"] = False

具体可参考:phantomjs设置

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进