目录
①解析的局部的文件内容都会在标签之间或者标签对应的属性中进行存储
一、数据解析
1、获取页面中指定的页面内容。
2、编码流程
①指定URL
②发起请求
③获取响应数据
④数据解析
⑤持久化存储
3、数据解析分类
①正则
②bs4
③xpath(重点)
4、数据解析原理概述
①解析的局部的文件内容都会在标签之间或者标签对应的属性中进行存储
②进行指定标签的定位
③标签或者标签对应的属性中存储的数据进行提取(解析)
二、需求描述
获取xx电影的喜剧排行榜的电影的图片
三、步骤
1、检查URL的内容
①两种办法,推荐抓包
检查发现内容不是想要获取的页面
2、ajax检查
在ajax返回的内容中找到了想要的内容
3、获取信息
根据标头中所带的信息,可以知道URL和请求方法以及返回的类型
page_text = requests.get(url=new_url,headers=headers).json()
4、数据解析
根据返回得到的内容(列表类型列表里面存储的是字典),根据字典的特性,通过键去寻找对应的值
for img in page_text:
img_list.append(img['cover_url'])
5、获取内容
通过得到的URL再通过requests去获取所要的到的图片,因为图片是二进制文件,所以得到的结果用.content获取
for img_url in img_list:
img_data = requests.get(url=img_url, headers=headers).content
6、持久化处理
图片的获取以及存储会比较慢,请耐心等待
img_name = img_url.split('/')[-1]
imgPath = './douban_test/' + img_name
with open(imgPath, 'wb') as fp:
fp.write(img_data)
四、源码
源码是获取图片的一个扩展,获取的是多页的图片,区别在于页面的URL上,这个区别只要通过对比几个URL就能找到差别。
# -*- coding: utf-8 -*-
import requests
import re
import os
import json
if __name__ == '__main__':
#创建一个文件夹
if not os.path.exists('./douban_test'):
os.mkdir('./douban_test')
headers = {
'User-Agent': 'Mozilla /5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.67 Safari/537.36'
}
#设置一个通用的url模板
# url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=None&start=1&limit=20'
url = 'https://movie.douban.com/j/chart/top_list?type=24&interval_id=100%3A90&action=None&start={}&limit=20'
for page in range(0,10):
new_url = url.format(page*20)
#使用通用爬虫对url对应的一整张页面进行爬取
img_list = []
page_text = requests.get(url=new_url,headers=headers).json()
# fp = open('./douban_test.json', 'w', encoding='utf-8')
# json.dump(page_text, fp=fp, ensure_ascii=False)
for img in page_text:
img_list.append(img['cover_url'])
for img_url in img_list:
img_data = requests.get(url=img_url, headers=headers).content
img_name = img_url.split('/')[-1]
imgPath = './douban_test/' + img_name
with open(imgPath, 'wb') as fp:
fp.write(img_data)