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('<img class="pic" data-original="(.*?)" src=".*?" data-default-img="338x190" alt=".*?" title=".*?',html) #正则表达式提取图片链接
names = re.findall('<img class="pic" data-original=".*?" src=".*?" data-default-img="338x190" alt="(.*?)" title=".*?',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("下载完毕")

下面是效果

附上源代码 如果各位要运行的话请复制这个,这个是我从我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('<img class="pic" data-original="(.*?)" src=".*?" data-default-img="338x190" alt=".*?" title=".*?',html)
names = re.findall('<img class="pic" data-original=".*?" src=".*?" data-default-img="338x190" alt="(.*?)" title=".*?',html)
dir_name = "girls"


# <img class="pic" data-original="https://anchorpost.msstatic.com/cdnimage/anchorpost/1023/96/1ddd3fb62e2d7574e87116b721a376_1663_1609669994.jpg?imageview/4/0/w/338/h/190/blur/1" src="https://anchorpost.msstatic.com/cdnimage/anchorpost/1023/96/1ddd3fb62e2d7574e87116b721a376_1663_1609669994.jpg?imageview/4/0/w/338/h/190/blur/1/format/webp" data-default-img="338x190" alt="是宝宝吖【瑶池】的直播" title="是宝宝吖【瑶池】的直播">
# <img class="pic" data-original="https://anchorpost.msstatic.com/cdnimage/anchorpost/1063/7f/d9ccf2a545e17161f875084da4001c_1663_1613471343.jpg?imageview/4/0/w/338/h/190/blur/1" src="https://anchorpost.msstatic.com/cdnimage/anchorpost/1063/7f/d9ccf2a545e17161f875084da4001c_1663_1613471343.jpg?imageview/4/0/w/338/h/190/blur/1/format/webp" data-default-img="338x190" alt="奇领小苹果的直播" title="奇领小苹果的直播">
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)

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

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值