爬取网页异步js渲染的数据,个人想到两种思路:
1、模拟请求得到返回的json数据,解析后爬取需求数据。
2、模拟浏览器加载完成后再正则匹配获取页面需求数据。
下面是第一种方法练习代码,后续学习中。。。
1 # !/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 # addUser: Gao 4 # addTime: 2018-01-28 22:06 5 # description: python爬虫练习 获取js渲染的数据 6 7 import urllib, urllib2, json, os 8 9 # 获取数据保存路径 10 FileName = 'Download/BiliBili' 11 12 # 初始化当前页码 13 Page = 1 14 15 """ 16 请求页面数据 17 """ 18 def parseUrl(): 19 url = "https://bangumi.bilibili.com/web_api/season/index_global?page=1&page_size=20&version=0&is_finish=0&start_year=0&tag_id=81&index_type=1&index_sort=0&quarter=0" 20 headers = { 21 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36" 22 } 23 parameters = { 24 'page': Page, 25 'page_size': 20, 26 'version': 0, 27 'is_finish': 0, 28 'start_year': 0, 29 'tag_id': 81, 30 'index_type': 1, 31 'index_sort': 0, 32 'quarter': 0, 33 } 34 data = urllib.urlencode(parameters) 35 request = urllib2.Request(url, data=data, headers=headers) 36 response = urllib2.urlopen(request) 37 js_data = response.read() 38 content = json.loads(js_data) 39 list = content['result']['list'] 40 for row in list: 41 saveImg(row['cover'], row['title']+'.jpg') 42 43 44 """ 45 保存图片 46 """ 47 def saveImg(imgUrl, imgName='img.jpg'): 48 # 图片路径 49 imgPath = os.path.join(FileName, imgName) 50 51 # 获取路径下图片信息 52 req = urllib2.urlopen(imgUrl) 53 buf = req.read() 54 55 # 写入文件 56 with open(imgPath, 'wb+') as f: 57 f.write(buf) 58 59 60 """ 61 判断文件夹是否存在 62 """ 63 if not os.path.exists(os.path.join(os.getcwd(), FileName)): 64 # 新建文件夹 65 os.mkdir(os.path.join(os.getcwd(), FileName)) 66 67 parseUrl()