首页 > 豌豆荚这种动态生成内容的网页,应该怎么爬取呢?

豌豆荚这种动态生成内容的网页,应该怎么爬取呢?

网页地址如下:

安卓游戏排行榜

详细说明

上边的地址,是豌豆荚的游戏排行榜,我想爬取游戏列表的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
【热门文章】
【热门文章】