Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

Python爬虫利用18行代码爬取虎牙上百张小姐姐图片

下面开始上代码

需要用到的库

import request #页面请求
import time #用于时间延迟
import re #正则表达式内容提取

构造请求头,这个要说明一下,有的网站不需要这个,但是虎牙需要,要不然就会给你返回错误码,大家可以试试,这是最基本的防反爬虫手段
至于怎么搞来的,按下f12然后去复制就可以了,详细可以问度娘请求头怎么做

headers = {
     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0"}

定义一个变量response 来接收请求到的网页,注意用request是返回的状态码所以要定义html变量。
然后用变量 html接收网页源代码

response = requests.get(headers=headers, url="https://www.huya.com/g/1663")
html = response.text

下面要用正则表达式了

urls = re.findall('.*?,html) #正则表达式提取图片链接
names = re.findall('(.*?),html)#正则表达式提取文件名称,用于最后保存图片用的名称

下面用一个for循环实现多张图片下载,对了要提前在你这个保存代码的文件夹下新建一个girls的文件夹用来保存图片 ./的意思就是当前目录,要不然会报错找不到目录,当然你也可以用os库加if语句判断一下,如果找不到就新建一个,自行百度吧,哈哈哈

i =1   #定义一个变量,后面提示用的
for url,names in zip(urls,names):
	time.sleep(0.1)   #防止被限制设置时间间隔0.5s
	if url[0] !='h'  #这个是用来补全连接,有些图片链接会掉了http//,我也不知道为什么
		url = 'http//' + url
	response = requests.get(url = url,headers = headers)
	print("正在下载第%d张"%i)
	with open('./girls/%s.jpg'%name,'wb') as jpg:#文件处理
		jpg.write(response.content)
	print("下载完毕")

下面是效果
Python爬虫利用18行代码爬取虎牙上百张小姐姐图片_第1张图片
附上源代码 如果各位要运行的话请复制这个,这个是我从我IDE复制过来的,运行没问题,由于现在我是在自学,上面的是我又重新把代码敲了一遍作为复习了,没有运行,可能出现错误,所以说要运行就复制这个总的

import time
import os
import requests
import re

headers = {
     
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0"}

response = requests.get(headers=headers, url="https://www.huya.com/g/1663")
html = response.text

urls = re.findall('.*?,html)
names = re.findall('(.*?),html)
dir_name = "girls"


# 是宝宝吖【瑶池】的直播
# 奇领小苹果的直播
i = 1
for url,name in zip(urls,names):
    time.sleep(0.5)

    if url[0] != 'h':
        url = 'https:' + url
    url = url.split('?')[0]
    response = requests.get(url=url, headers=headers)

    print('正在下载第 %d 张'%i)

    i = i + 1


    with open('./girls/%s.jpg' % name, 'wb') as jpg:
        jpg.write(response.content)

    print('<%s>下载完成!' % name)

可能写的很复杂,多线程什么的我现在还不懂,大佬勿喷,欢迎点评

你可能感兴趣的:(python)