day6常见的反爬总结
一、爬虫流程
第1步:确定爬虫对象(爬哪个网页的数据)
第2步:找接口(网页检查,network-Fetch/xhr,刷新,点左下角name里的,看显示的preview有没有想要的信息,在Headers里面复制Request url)
-
有接口:直接对接口发送请求 -> 成功(直接json解析)
-> 失败就进入下一步 -
没有接口,直接进入下一步
第3步:用requests直接对原始网页地址发送请求
1)请求成功 -> 解析数据(bs4、lxml)
2)请求失败 -> 尝试添加user-agent和cookie,成功就解析,失败进入下一步
第4步:用selenium打开网页,获取网页内容
1)请求成功 -> 解析数据(bs4、lxml)
2)请求失败 -> 找失败的原因,尝试解决失败的问题 -> 问题无法解决进入下一步
第5步:放弃,换一个目标
二、英雄联盟皮肤爬虫
import requests
import os
def get_all_hero_id():
url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
response = requests.get(url)
return [hero['heroId'] for hero in response.json()['hero']]
def get_one_hero_skins(hero_id):
# 1.对皮肤接口发送请求
url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'
response = requests.get(url)
result = response.json()
# 2.获取数据
# 英雄名字
hero_name = result['hero']['name']
if not os.path.exists(f'./英雄皮肤/{hero_name}'):
os.mkdir(f'./英雄皮肤/{hero_name}')
# 所有皮肤
for skin in result['skins']:
# 获取皮肤名称和图片地址
skin_name = skin['name'].replace('/', ' ')
img_url = skin.get('mainImg')
if not img_url:
continue
# 下载图片
img_data = requests.get(img_url).content
open(f'./英雄皮肤/{hero_name}/{skin_name}.jpg', 'wb').write(img_data)
print('皮肤下载成功!')
if __name__ == '__main__':
# 创建英雄信息对应的文件夹
if not os.path.exists('./英雄皮肤'):
os.mkdir(&