【问题标题】:Wait until the webpage loads in Scrapy等到网页在 Scrapy 中加载
【发布时间】:2015-02-27 14:15:35
【问题描述】:

我正在使用 scrapy 脚本通过“yield”加载 URL。

MyUrl = "www.example.com"
request = Request(MyUrl, callback=self.mydetail)
yield request
def mydetail(self, response):
    item['Description'] = response.xpath(".//table[@class='list']//text()").extract()
    return item

该 URL 似乎至少需要 5 秒才能加载。所以我希望 Scrapy 等待一段时间来加载 item['Description'] 中的整个文本。 我在 settings.py 中尝试了“DOWNLOAD_DELAY”,但没有用。

【问题讨论】:

  • Scrapy 在运行回调之前下载整个响应。您在浏览器上注意到的加载时间可能是通过 javascript 获取/呈现的其他内容,而 scrapy 无法自行完成。尝试做scrapy shell <url> 来查看网站上的scrapy“看到”。您需要检查页面获取的其他内容并修改您的代码以匹配或使用无头浏览器来呈现页面的 javascript。 (例如 Splash、Selenium)
  • 我使用 splash 来渲染 javascript。但是输出是空的。我不确定 scrapy 是否正在渲染我的 javascript 页面
  • 不管你是否使用 splash,@marven 所说的都是正确的,Scrapy 将等待整个响应再继续。如果您使用 Splash,则 Splash 将成为新的“网络服务器”。从 Scrapy 的角度来看,Splash 是它的端点,会等到 Splash 返回整个响应。
  • 按原样,你的回调是“self.mydetail”,但函数是“jobdetail”。这是笔误吗?

标签: python scrapy timedelay time-wait


【解决方案1】:

简要介绍 firebug 或其他工具以捕获由 javascript 代码生成的 Ajax 请求响应。您可以做出一系列响应来捕获页面上传后出现的那些 ajax 请求。有几个相关问题:parse ajax content, retreive final page, parse dynamic content.

【讨论】:

    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多