剖析分页信息

找到分页信息来源 doc里找找 xhr里找找 js文件里找找
最后搜到在js文件中

使用request请求这个网址,得到的是含有json语法的对象。使用strip函数,删除不需要的地方。
使用json加载字典,可以方便取到想要的值。

import requests
import json
res = requests.get('http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page=2&callback=newsloadercallback&_=1500521276419')
res.encoding = 'utf-8'
jd = json.loads(res.text.lstrip('  newsloadercallback(').rstrip(');'))
# jd

获取其中的网页

envurls = []
for ent in jd['result']['data']:
    envurls.append(ent['url'])
envurls

将其封装成函数方便调用

import requests
import json
def parseListLinks(url):
    newsdetails = []
    res = requests.get(url)
    jd = json.loads(res.text.lstrip('  newsloadercallback(').rstrip(');'))
    for ent in jd['result']['data']:
        newsdetails.append(getNewsDetail(ent['url']))
    return newsdetails

调用函数

url = 'http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page=2&callback=newsloadercallback&_=1500521276419'
parseListLinks(url)

使用for循环产生多页链接

url = 'http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&tag=1&format=json&page={}&callback=newsloadercallback&_=1500521276419'
news_total = []
for i in range(1,3):
    newsurl = url.format(i)
    newsary = parseListLinks(newsurl)
    news_total.append(newsary)

其中有些函数可以在之前写的文章中找到http://www.jianshu.com/p/be18c87ad877

你可能感兴趣的:(剖析分页信息)