新手问题 抓取淘宝商品图片?

cqcn1991 · 2013年12月20日 · 最后由 runup 回复于 2016年06月09日 · 6097 次阅读

类似现在豆瓣的东西 根据商品链接,能把商品的图片抓取下来

我试了一下,不知道淘宝是否做了屏蔽……?好像不行

desc "Fetch sites"
task :fetch_taobao => :environment do
  require 'nokogiri'
  require 'open-uri'

  url = "http://item.taobao.com/item.htm?spm=a1z09.5.0.0.g7OprK&id=26352216965"
  doc = Nokogiri::HTML(open(url))
  puts doc.css("title").text
  puts doc.css("img")[0]['src']
  puts doc.css("img#J_ImgBooth")[0]['src']
end

第1个img能抓到。但是后面的商品图片img#J_ImgBooth就不行了……

确实做了屏蔽,硬来得话,仔细看一下交互的通讯包,做些 cookie 上得处理应该可以,但是意义不大,一旦淘宝调整,你就得跟在后面改代码。

#1 楼 @otecteng 那有啥办法?申请 API?

你至少也得伪装一下自己的 user-agent 然后控制每秒的访问次数 次数过多 前端直接拦截了

#3 楼 @zj0713001 请问具体怎么写?我试了一下,但是还是不行……

确认下“就不行了”是什么情况?

@cqcn1991 ,能申请 api 最好,否则费力不讨好

@otecteng api 的使用门槛现在比较高,不好使。

@cqcn1991 你要抓其它的图,可能得去解析它的 js,js 里面好像带了另外的图。

不是有 open api 吗

淘宝用了 lazy load,直接 src 是获取不到的,需要 data-src。

require 'nokogiri'
require 'open-uri'

url = "http://item.taobao.com/item.htm?spm=a1z09.5.0.0.g7OprK&id=26352216965"
doc = Nokogiri::HTML(open(url))
puts doc.css("title").text
puts doc.css("img")[0]['src']
puts doc.at_css("#J_ImgBooth")['data-src']

#9 楼 @shiny 对,最终就是抓的 [data-src]……

#10 楼 @cqcn1991 淘宝的有些页面在 open 的时候直接返回 302,用 nokogiri 都不好抓,你可以尝试去 hack 豆瓣 dongxi 的 API,用 RestClient 带上 cookies 就能访问

#12 楼 @cqcn1991 大牛谈不上,你可以用 Chrome 的审查元素工具中的 Network 来抓包

问下,抓取的图片如何存储到数据库?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号