零、套图下载
本次爬取小姐姐的照片,作为初学者,这次爬取的是静态网站的照片
全部代码如下
import os
import time
import requests
from bs4 import BeautifulSoup
'''请求网页'''
headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0' }
url = 'https://www.vmgirls.com/17167.html'
web_req = requests.get(url,headers = headers)
html = web_req.text
'''BeautifulSoup'''
soup = BeautifulSoup(html,"html.parser")
web_link = soup.find_all('div',class_ = 'nc-light-gallery')
img = web_link[0].find_all('img')
nam = web_link[0].find_all('a')
'''文件创建'''
dir_name = nam[-1].get('title')
if not os.path.exists(dir_name):
os.mkdir(dir_name)
'''下载图片'''
n = 0
img_link = img[0].get('src')
for i in img:
img_link = i.get('src') #图片链接
img_link = 'https:'+img_link
img_res = requests.get(img_link,headers = headers)
img_name = nam[-1].get('title') #图片名称
img_name = img_name+str(n)+'.jpeg'
n = n + 1
with open(dir_name + '/' +img_name,'wb') as f: #下载图片
f.write(img_res.content)
time.sleep(3)
第一步仍是利用requests库爬取网页的html代码,头部设置一个user-agent模拟浏览器访问,并将服务器回应进行打印
在对相应进行BeautifulSoup格式的转换,然后找到关键代码并提取,与爬取小说部分类似
调用OS库执行系统相关操作,dir_name为一个文件夹名,其名称是从html代码中找到对应图片名称来命名的,然后判断电脑中是否有此文件夹,如果没有,则新建一个该名称的文件夹
在循环中遍历不同图片的链接,img_name为图片名称,采用与文件夹相同的方式命名,并在其后加数字作为区别,然后数字自增,每次循环都有一个不同的名字来给图片命名,最后再加上.jpeg作为图片格式名保存
在使用OS库中的方法下载图片,并在其后加三秒钟的延迟,模拟真人访问,循环结束后,文件夹中就会下载好图片
下载完毕如图所示
壹、首页分析
网站首页获取各套图链接
import requests
from bs4 import BeautifulSoup
'''请求网页'''
headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0' }
url = 'https://www.vmgirls.com/'
web_req = requests.get(url,headers = headers)
html = web_req.text
'''BeautifulSoup'''
soup = BeautifulSoup(html,"html.parser")
urls = soup.find_all('a',class_ = 'media-content')
'''获取套图链接'''
pho_link = urls[input_num].get('href')
pho_link = 'https://www.vmgirls.com/'+pho_link
print(pho_link)
这一部分,主要是分析从首页中的代码如何提取对应套图的链接,因为只有找到各链接后才能对网站中所有套图进行爬取,将提取到的链接传入上一部分的代码,即可下载所有套图或者对应套图
贰、代码拼接
接下来只需要将以上两部分代码拼在一起,即可完成输入套图序号下载对应套图的功能
import time
import os
import requests
from bs4 import BeautifulSoup
'''原始网页'''
headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0' }
url = 'https://www.vmgirls.com/'
web_req = requests.get(url,headers = headers)
html = web_req.text
soup = BeautifulSoup(html,"html.parser")
urls = soup.find_all('a',class_ = 'media-content')
'''获取套图链接'''
def get_url(input_num):
pho_link = urls[input_num-1].get('href')
pho_link = 'https://www.vmgirls.com/'+pho_link
return pho_link
'''下载套图'''
def dl_pho(url):
headers = { 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0' }
web_req = requests.get(url,headers = headers)
html = web_req.text
'''BeautifulSoup'''
soup = BeautifulSoup(html,"html.parser")
web_link = soup.find_all('div',class_ = 'nc-light-gallery')
img = web_link[0].find_all('img')
nam = web_link[0].find_all('a')
'''文件创建'''
dir_name = nam[-1].get('title')
if not os.path.exists(dir_name):
os.mkdir(dir_name)
'''下载图片'''
n = 0
img_link = img[0].get('src')
for i in img:
img_link = i.get('src') #图片链接
img_link = 'https:'+img_link
img_res = requests.get(img_link,headers = headers)
img_name = nam[-1].get('title') #图片名称
img_name = img_name+str(n)+'.jpeg'
n = n + 1
with open(dir_name + '/' +img_name,'wb') as f: #下载图片
f.write(img_res.content)
time.sleep(3)
input_num = 10
url = get_url(input_num)
dl_pho(url)
至此结束,只是一个很简单的程序,并没有完善完成,比如只能爬取十套图片,后期仍需在此基础上进行完善,并增加更多功能。