食色,性也。我相信每位绅士都会喜欢看漂亮妹子,但是在网上看的精品图片如果要保存的话,一张一张来是非常地麻烦的,所以我在这里推荐大家一个用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,如果代码的编写有什么错误或者有什么地方可以改善的,请各位大佬指出。谢谢观看