Back

抓取并且分析远程的接口的数据

发布时间: 2015-06-19 06:11:00

以抓取 PPTV 在 豌豆荚的首页 的排名为例子。

1. 先把手机连接到 charlse上  (参考:这里) 。

2. 然后,打开豌豆荚(需要安卓手机), 找到对应的接口(可以通过搜索PPTV 这个关键字找到)

3. 这个接口就是: http://112.5.16.36:3011/wdj/http://startpage.wandoujia.com/api/v1/fetch?f=phoenix2&max=5&netStatus=WIFI&net=WIFI×tamp=1434693333387&id=wandoujia_android&v=4.17.1&u=7139c1b794754b9a957557a21f024fd7ba26b4ca&launchedCount=31&start=0&token=34ce2e167a88c88cc53a842665c06690&entry=other§ionItemNum=3&vc=6708&ch=wx_baidu_mm_float

(可选)4. 使用postman 或者啥东东,再确定一次。发现这个接口是正确的。

5. 用ruby 模拟这个过程:

$ irb
 require 'httparty'
 url  = 'http://112.5.16.36:3011/wdj/http://startpage.wandoujia.com/api/v1/fetch?f=phoenix2&max=5&netStatus=WIFI&net=WIFI×tamp=1434693333387&id=wandoujia_android&v=4.17.1&u=7139c1b794754b9a957557a21f024fd7ba26b4ca&launchedCount=31&start=0&token=34ce2e167a88c88cc53a842665c06690&entry=other§ionItemNum=3&vc=6708&ch=wx_baidu_mm_float'
response = HTTParty.get(url)

# 把response.body 转换成JSON对象。
result =  JSON.parse(response.body)

# 通过观察,发现该接口返回的数据中, cards是个节点。包含了我们要抓取的内容。所以,
result['cards'].each_with_index do |e, index|
    # 这里就可以获得 PPTV 所在的位置了。
    puts "#{e['feedItem']['title']}, index: #{index}"   
end

# 下面是结果:
口袋成语, index: 0
中华英雄传, index: 1
我爱封神, index: 2
KK唱响, index: 3
.....
PPTV聚力, index: 49
QQ浏览器, index: 50
...

注意:

1.  对于某些接口,需要用汉字转换到 unicode , 见:  http://pages.ucsd.edu/~dkjordan/resources/unicodemaker.html

2. 对于 url, 有时候转到的是原始URL, 有的是 编码后的URL, 在这里也可以转换: http://meyerweb.com/eric/tools/dencoder/

Back