0

我正在尝试发出跨域请求以获取 html,对其进行缓存,然后遍历缓存的 html 以提取数据并最终将其放在页面上。这是有效的,但它浪费了 http reqs。

问题是,一旦我data.responseText用 jquery包装,$(data.responseText)它就会发出 40 个 http 请求来拉入图像。

是否可以在没有额外图像请求的情况下将 jquery html 对象缓存在变量中?

在这里使用这个 x-domain hack: https ://github.com/padolsey/jQuery-Plugins/blob/master/cross-domain-ajax/jquery.xdomainajax.js

getPage: (baseUrl) ->
  console.log("beg scraping")
  $.ajax
    url: baseUrl,
    type: "get",
    dataType: "",
    success: (data) =>      
      frag = data.responseText
      @page = $(frag) # cache in object, now 40 extra reqs.
      # this doesn't work, only returns images
      #@page = $(frag).find('[src]').remove()
      console.log "Scraping done"
    error: (status) ->
      #window.pushError("getPage error: #{status}")
4

2 回答 2

1

您可以快速搜索文本并删除所有<img>元素。然后创建 jQuery 对象:

var no_images = $(data.responseText.replace(/<img[^>]*>/g, ''));

这是另一个您可能会发现有用的线程:

将 HTML 字符串加载到 jQuery 中而不请求图像

于 2012-11-28T05:30:44.867 回答
1

或者,如果您想保留图像而不自动请求它们,则可以将 src 属性替换为不会自动获取的内容。例如

page.replace(/src/g, 'source');

这会将 src 引用保留在“源”下,并且不会自动加载图像。

于 2012-12-07T23:32:14.220 回答