找到分页信息来源 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