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

网页地址如下:

安卓游戏排行榜

详细说明

上边的地址,是豌豆荚的游戏排行榜,我想爬取游戏列表的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文件,发现查看更多这部分的内容是这样的
图片描述

查看更多生成的内容格式跟原来的完全不一样,他们就在一行,没有格式,所以这下我不知道应该怎么办了,所以求教这样该怎么办?

阅读 6.5k
5 个回答

还有比抓ajax返回json 更好抓的页面吗???

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
http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start=60

max 表示一次请求返回几个app信息,start 表示从第几个开始。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题