网页地址如下:
安卓游戏排行榜
详细说明
上边的地址,是豌豆荚的游戏排行榜,我想爬取游戏列表的TOP100,我用的是requests和BeautifulSoup这两个库
代码如下:
import requests
from bs4 import BeautifulSoup as bs
URL = 'http://www.wandoujia.com/top/game'
re = requests.get(URL).text
soup = bs(re)
result = soup.find_all('a','name')
for i in result:
print(i.text)
输出的结果是正确的,但是,如下图所示
只能够读取到玩玩四川麻将这个游戏这,需要点击查看更多才能显示出来的游戏,并不能抓取到
于是,我就手动点击查看更多,让他展示出来剩下的游戏,然后保存成html文件,上述的代码改动一部分,读取本地的html来解析
soup = bs(open('D:\\game.html'))
结果发现,输出的内容中还是没有查看更多这个链接生成的那些,于是,我用VS Code打开html文件,发现查看更多这部分的内容是这样的
查看更多生成的内容格式跟原来的完全不一样,他们就在一行,没有格式,所以这下我不知道应该怎么办了,所以求教这样该怎么办?
http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start=60
max 表示一次请求返回几个app信息,start 表示从第几个开始。
看看人家们怎么搞定百度网盘的吧:https://.com/a/1190000005105528
还有比抓ajax返回json 更好抓的页面吗???
我帮你实现了你说的功能,代码如下:(可以爬取游戏的名字、下载量和图标,要爬取其他的你可以自行添加)
var configs = {
domains: ["apps.wandoujia.com"],
scanUrls: ["http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start=0"],
contentUrlRegexes: ["http://www\\.wandoujia\\.com/apps/.*"],
helperUrlRegexes: ["http://apps\\.wandoujia\\.com/api/v1/apps\\?type=weeklytopgame&max=12&start=\\d+"],//可留空
fields: [
{
// 第一个抽取项
name: "title",
selector: "//span[contains(@class,'title')]",
required: true //是否不能为空
},
{
// 第二个抽取项
name: "download",
selector: "//i[@itemprop='interactionCount']",
required: false //是否不能为空
},
{
//第三个抽取项
name:"thumb",
selector:"//div[contains(@class,'app-icon')]/img[@itemprop='image']/@src",
}
]
};
configs.onProcessHelperUrl = function(url, content, site) {
var jarr = JSON.parse(content);
//发现内容页
for (var i = 0, n = jarr.length; i < n; i++) {
var new_url = "http://www.wandoujia.com/apps/"+jarr[i].packageName;
site.addUrl(new_url);
}
var currentStart = parseInt(url.substring(url.indexOf("&start=") + 7));
var start = currentStart+12;
if(start < 100){
site.addUrl("http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start="+start);
}
return true;
}
var crawler = new Crawler(configs);
crawler.start();
把代码粘贴到神箭手云爬虫开发平台上就可以直接跑了。
http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=50&start=0&opt_fields=stat.weeklyStr,likesCount,reason,ad,title,packageName,apks.size,icons.px68,apks.superior,installedCountStr,snippet,editorComment,apks.versionCode,tags.,trusted,categories.&callback=jQuery18309449446129558037_1460972020396&_=1460972032924
max50条,start从第1条开始
#coding=utf-8
import urllib2
import json
i=0
while i<=10:
url=url="http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start="+str(i*12)+"&opt_fields=stat.weeklyStr,title,editorComment"
i=i+1
req=urllib2.Request(url)
response=urllib2.urlopen(req)
html=response.read()
js=json.loads(html)
for j in js:
print j['title'],j['stat']['weeklyStr']
print j['editorComment']
print "------------##"*5
print "------------##"*5