使用python多线程爬取好看的图片

食色,性也。我相信每位绅士都会喜欢看漂亮妹子,但是在网上看的精品图片如果要保存的话,一张一张来是非常地麻烦的,所以我在这里推荐大家一个用python 爬取我们想要的妹子图。

使用requests库

requests库是基于urllib3来写的一个第三方库,它相比与urllib3来说更加方便,以下是具体使用方法:

#导入requets库
import requests
#找到想要爬取的网站,我以煎蛋网为例
url = 'http://jandan.net/ooxx/MjAyMTAzMTItODA='
response = requests.get(url)

以上就是requests库的使用,现在很多网站都有一些反爬虫的措施,所以我们最好再加一段

header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0'}
response = requests.get(url,headers=header)

这样服务端就会以为我们是在用浏览器访问了,当然user-agent可以进行自己想要的替换。

爬虫编写:

现在学会了如何使用requests发起请求,那就该开始踩点了,就像小偷要经常踩点掌握主人行踪一样,我们也要对网站进行踩点,来看看我们需要下载的图片的地址的特征。
在这里插入图片描述
点击检查元素,查看到图片的地址在这里插入图片描述
我们可以看到图片的地址的位置是特殊的,我们可以通过这个特性使用正则表达式来匹配出图片的地址

pic = re.findall('<img src="(.*?)" referrerPolicy="no-referrer" />', resopnse.content.decode())

然后就可以直接对图片下载了。
看到这里我们发现如果这样子写爬虫的话是不够爽的,因为一次只能收一个网页的图片,所以我们来使用多线程,一次性快速地把几百页的图片收了。

Threading库

Threading库可以帮助我们快速地使用多线程来爬取图片,使用方法也非常简单,只有三步:

#引用Threading库
import threading
#创建线程任务,Thread()的参数是一个方法名,openurl就是我写的爬虫
misson = threading.Thread(openurl(url))
#开始工作
misson.start()

这样就是简单的一次线程的创建与使用了。

完整代码

import re
import requests
import time
import os
import string
import threading


def openurl(url, folkname):
    s = requests.session()
    s.keep_alive = False
    requests.adapters.DEFAULT_RETRIES = 5
    header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0'}
    resopnse = requests.get(url, headers=header)
    pic = re.findall('<img src="(.*?)" referrerPolicy="no-referrer" />', resopnse.content.decode())
    os.mkdir(folkname)
    os.chdir(folkname)
    for pics in pic:
        filename = pics.split('/')[-1]
        with open(filename, 'wb') as f:
            url = 'https:'+pics
            rec = requests.get(url)
            f.write(rec.content)
            time.sleep(0.3)


if __name__ == '__main__':
    url = 'http://jandan.net/ooxx/MjAyMTAzMTItMTA3#comments'
    for word in string.ascii_letters:
        url = 'http://jandan.net/ooxx/MjAyMTAzMTItOD'+word+'='
        mission = threading.Thread(openurl(url=url, folkname=word))
        mission.start()

因为我也是刚刚才学python,如果代码的编写有什么错误或者有什么地方可以改善的,请各位大佬指出。谢谢观看

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值