python怎么爬虎牙_Python爬虫:爬取虎牙星秀主播图片

动态爬取思路讲解

1.简单的爬虫只需要访问网站搜索栏处的url,就可以在开发者工具(F12)处,利用正则表达式、Xpath、css等进行定位并抓取数据;

2.虎牙星秀页面不同于简单的网页,随时都在更新,但搜索栏处的url并未改变,所以它是一个动态加载(ajax)的页面;

3.需要在开发者工具界面处对network进行抓包,提取真正给网站页面提供图片链接的url;

4.通过抓包的url,会发现打开的是一个json格式的文本,在里面可以抓取到需要的数据以及链接;

5.最后我们就可以打开Pycharm,活动小手指,敲击小键盘啦!!!

(不要太忘情,打扰到身边的小伙伴哦~)

导入需要的python模块

通过pip install 模块名,本人使用的是Anaconda Prompt导入

import requests

import os

import json

import time

from random import randint

使用Python导入的话比较麻烦,所以强烈建议大家使用Anaconda导入模块。

通过爬虫获得的主播图片

在Pycharm中所敲的代码

# -*- coding: utf-8 -*-

# @Date: 2020/8/12 16:17

# @Author: Ricky Rau

import requests

import os

import json

import time

from random import randint

def main():

url = 'https://www.huya.com/cache.php'

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'

}

for i in range(5):

page_num = str(i)

params = {

'm': 'LiveList',

'do': 'getLiveListByPage',

'gameId': '1663',

'tagAll': '0',

'page': page_num

}

time.sleep(randint(1,5))

img_lists = getData(url, params, headers)

img_content = get_img_content(img_lists)

saveData(img_lists, img_content)

def getData(url, params, headers):

json_text = requests.get(url=url, params=params, headers=headers).text

jsonObj = json.loads(json_text) #解码的过程,把乱码变成了中文

datas = jsonObj['data']['datas']

#print(datas)

img_lists = []

for data in datas:

img = []

nick = data['nick']

screenshot = data['screenshot']

img.append(nick)

img.append(screenshot)

img_lists.append(img)

return img_lists

def get_img_content(img_lists):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'

}

img_content = []

for i in range(len(img_lists)):

src = img_lists[i][1]

content = requests.get(url=src, headers=headers).content

print('解析完毕第{}张图片!'.format(i))

img_content.append(content)

return img_content

def saveData(img_lists, img_content):

if not os.path.exists('./xingxiu'):

os.mkdir('./xingxiu')

for i in range(len(img_lists)):

img_name = img_lists[i][0] + '.jpg'

img_path = './xingxiu/' + img_name

with open(img_path, 'wb') as fp:

fp.write(img_content[i])

if __name__ == '__main__':

main()

代码中涉及的模块详解

模块

用法

requests

用来获取网页源代码

json

把json格式的文本变为python可以处理的文本

os

创建一个存放图片的文件夹

time

利用time.sleep()方法给程序设置延迟,防止被网站检测到

random.randint

设置随机睡眠时间,单位为秒

Python 之禅

美比丑好,明比涩强。简胜于繁,繁强于难。

平言莫绕,宜疏莫密。行文如水,易懂为王。

勿提特例,皆循此规。实虽胜纯,识错必究。

若需留证,亦要言明。不明其理,追根问底。

必有一法,可解谜题。汝非龟叔,求之故难。

立足当下,行必有方。行难言喻,所思欠妥。

行易言表,所思可嘉。名正易识,善莫大焉!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值