yyyying的blog

好好学习 天天向上

0%

今日说法爬虫

今日说法爬虫实战(初版)

Excel数据 :百度网盘分享提取码:n3ue

针对《今日说法》央视视频进行爬取,网页地址:https://tv.cctv.com/lm/jrsf/

网页分析

首先通过分析发现html文件中中没数据,通过Google Chrome分析发现数据源自下图
Chrome开发者工具截图
并且可以通过进一步测试分析,n代表爬取信息数目(n最大值100,即一次请求最多获取100条信息),p为页数,本爬虫通过修改p值完成所有数据爬取。

数据爬取

数据爬取通过python-request模块实现
经过分析同过request模块发送get请求,获取数据并保存本地

1
2
3
4
5
6
7
8
def get_data(page):
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?id=TOPC145146466500891' \
'4&n=1000&sort=desc&p={pageNo}&mode=0&serviceId=tvcctv&cb=Callback'.format(pageNo=page)
headers = {
'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36'
}
response = requests.get(url, headers=headers)

通过循环,传入不同页码进行信息获取。

数据解析

爬取后获得的信息格式为:

Callback({"data":{"total":1000,"list":[datas]}});

通过简单的字符串分割可以得到一个键值为data的字典的字符串。接下来通过python-json将字符串转换为字典通过data[data][list]获取后续所需要的数据

数据保存

数据保存为Excel通过python-openpyxl模块实现‘

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def save_data(datas):
wb = openpyxl.Workbook()
wb.create_sheet(index=0,title='今日说法')
dataNo = len(datas)
info = len(datas[0])
sheet = wb.worksheets[0]

sheet.cell(1, 1).value = '标题'
sheet.cell(1, 2).value = '简介'
sheet.cell(1, 3).value = '时长'
sheet.cell(1, 4).value = '封面地址'
sheet.cell(1, 5).value = 'URL'
sheet.cell(1, 6).value = '发布日期'
sheet.cell(1, 7).value = 'focus_date'
sheet.cell(1, 8).value = 'guid'
sheet.cell(1, 9).value = 'id'


for i in range(dataNo):
sheet.cell(i+2, 1).value = datas[i]['title']
sheet.cell(i+2, 2).value = datas[i]['brief']
sheet.cell(i+2, 3).value = datas[i]['length']
sheet.cell(i+2, 4).value = datas[i]['image']
sheet.cell(i+2, 5).value = datas[i]['url']
sheet.cell(i+2, 6).value = datas[i]['time']
sheet.cell(i+2, 7).value = datas[i]['focus_date']
sheet.cell(i+2, 8).value = datas[i]['guid']
sheet.cell(i+2, 9).value = datas[i]['id']
print('第',(i+1),'条信息保存完毕')

wb.save('今日说法.xlsx')