Gem 分享一个抓取淘宝商品信息的 gem

wikimo · 2013年12月10日 · 最后由 wikimo 回复于 2014年02月28日 · 8074 次阅读

高手就直接忽略吧。

需求描述:淘宝现在对 API 的调用权限貌似门槛比较高,一般用户不给商品基础信息调用,于是自己写了个。思路很简单,通过 Nokogiri 抓取 HTML,代码也写的很简单,其实写这个玩意也纯粹是想熟悉下如何去写一个 gem,以前都用人家写好的,觉得自己也有必要熟悉下。另附上写 gem 的基本方法:http://ruby-china.org/wiki/how_to_create_a_gem

功能描述:通过淘宝或天猫链接获取商品标题,价格,图片信息,完毕。

代码地址:https://github.com/wikimo/TaoBaoApi

高手 👍 就是代码还需要格式化一下。有两个空格,8 个空格并存,不好。

@xds2000 呵呵,班门弄斧了……OK ,改进下,直接 tab 键了,这样不太好,貌似建议是空格。

这 2 个 gem 依赖不一样,咋办?

用 1.6.0 的时候感觉会有问题,所以后来选择了 1.5.10,我用 rvm 不会有这问题,让我思考下如何解@sevk

似乎也没有问题啊,可以共存。

@sevk

#5 楼 @wikimo 如果是在 Gemfile 里面,和 mechanize 就不能共存了吧?

gem 'mechanize'
gem 'TaoBaoApi'

@sevk let me have a try...

@sevk 可以啊,奇怪。

#8 楼 @wikimo 哦,我再试试,奇怪了

@sevk bundle update 试试 或者先把 gemfile.lock 删掉

gem install bundler 之后,可以了。 是 bundler 的版本太旧了 。

以前一直是 gem install bundle 。 不会升级 bundler

哈哈, Great...你也需要用我这个 gem 么?其实写的很简单。 @sevk

从页面抓内容, 要是淘宝页面结构变了 咋整

README 里面有个小错误。 “或者你可以通过 em installl 直接安装:” 应该是 gem install。

#12 楼 @wikimo 嗯,想用用看,我比较懒,哈哈

要是真做相关工作,应该自己写一个

虽然安装成功,但是使用时是不兼容的:

@shooter 相应的调整抓取格式,淘宝的 api 使用现在比较严格,通过 API 不给获取产品数据。

@IchiNiNiIchi 3Q,改进了

@sevk 我再研究研究,看看这个情况怎么出现的

#20 楼 @wikimo 嗯,多谢哈

解法看这里:http://stackoverflow.com/questions/13887958/sinatra-error-gemloaderror-unable-to-activate-actionpack-3-2-3-because-act

Use a Gemfile and bundler with your app,当 gem 有冲突的时候,然后在当前目录下 irb,就可以了,我的 ruby 版本是 1.9.3,2.0 我没测试

@sevk

#22 楼 @wikimo 嗯,估计是 2.0 的关系,我在当前 Gemfile 目录。

@sevk 哈哈,我待会装 2.0 试试,你现在在哪个单位上班,还是老地方么?

#24 楼 @wikimo 是的在附近混混日子, 上海杭州的太远了。

#2 楼 @wikimo hi,我最近在帮我一个朋友做 songsm.com,需要这个功能,我想帮忙改进一下这个 gem,那个商品名称有更好的处理方法,直接找页面里面的

就有了

@assyer OK,我试试看,可以的话,我更新下。

@sevk 更新了对 nokogiri 的依赖,有兴趣可以再试试

#29 楼 @wikimo 嗯,好的,今天我外婆杀猪,没来得及 push,晚上来看,不过我对 pull request 的流程不是很熟悉,我已经 fork 了,待会儿直接 push 是到我的分支上啊,要怎么 push 到你的分支上呢?

#28 楼 @wikimo 你有 push 到 github 吗?

@assyer sorry,忘了,已经 push,需要通过允许才能合并。

#29 楼 @wikimo 哦,我直接用 mechanize 了, 其实很简单:

a=Mechanize.new
s=a.get url
title = s.at '.titlexxx'
price = s.at '.pricexxx'

#32 楼 @wikimo http://dongxi.douban.com/show/create 可以看看这个的抓取,它难道也像我们这样从一个个网站页面上面抓取?

@assyer 谢谢你的建议,已经合并了你的代码并做了一些重构。但这个 gem 还是有些问题的,对于 http 302 的一些淘宝 url 是没办法抓取到信息的。因为 open url 的时候返回 302 了,这种情况还没做处理。 豆瓣东西我也研究过,我想它应该也是写了很多抓取规则。淘宝本身有 api 可用,但是现在门槛高了,不好使。京东这些本身也都开放了 api 了。

@sevk 这更简单啊

当前版本已更新

  • 修正了某些商品链接返回 302 的问题
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册