1 前言/
平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。
/2 项目准备工作/
首先 我们第一步我们要安装一个pycham的软件。可以参考这篇文章:Python环境搭建—安利Python小白的Python和Pycharm安装详细教程。
天堂网的网址:
https://www.ivsky.com/bizhi/1920x1080/
我们需要下载几个库,怎么下载呢?打开pycharm,依次点击File,再点开Settings,如下图所示。
打开后会出现这个界面点击你的项目名字(project:(你的项目名字)),之后在project interpreter下,点击加号,而后下载我们需要的库,如下图所示。
本项目需要用到的是库是requests、lxml、fake_useragent,如下图所示。fake_useragent一般是没有的,需要通过下面的命令进行安装:
pip install fake_useragent
/3 项目实现/
1、导入需要的库(requests,lxml, fake_useragent)。
2、我用了封装方法去实现各个部分的功能。首先要写一个框架:构造一个类TianTangWebsite ,然后定义一个init方法里继承(self),再定义一个主方法(main)。最后实现这个main方法,依次一步一步进行实现。
3、我们把天堂网的网址拿过来,构造请求头。这里说一下这个UserAgent的获取方法。在打开天堂网的网站后,按下键盘上的F12键,之后会进入到开发者模式,之后点开network,如下图所示。
4、而后随便点击一个name,复制header里边的UserAgent就可以了。
5、我们点击下一页的地址观察网址的变化,如下所示:
https://www.ivsky.com/bizhi/1920x1080/index_2.html
https://www.ivsky.com/bizhi/1920x1080/index_3.html
https://www.ivsky.com/bizhi/1920x1080/index_4.html
很明显的发现,这个网址的网页数字一直在变化。我们可以用格式化{}去代替变化的值,类似这样:
https://www.ivsky.com/bizhi/1920x1080/index_{}.html
6、然后我们用for循环去遍历这些网址,代码如下所示:
def main(self):
for i in range(1,2):#页数随机客户随便 设置
url=self.url.format(i)
print(url)
7、我们定义这个get_home()方法去请求到这个网址。
9、我们需要解析得到的数据,接下来定义一个xiap的方法,拿到我们请求的网址。接下来就是该项目的关键了。
10、至此,针对反爬虫的措施我们已经提前做好了准备,下一步将进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,具体实现咱们下篇文章进行详解。
/4 小结/
本文主要内容为对图片网站进行了基本简介,基于 Python 中的爬虫库 requests 、lxml、fake_useragent,提前部署了请求头,模拟浏览器,针对反爬虫的措施我们已经提前做好了准备。
下篇文章将带大家进行网页结构的分析以及网页图片地址数据的提取,并针对解析出来的图片地址予以批量下载,敬请期待~~
往期精彩文章推荐:
想学习更多Python网络爬虫与数据挖掘知识,可前往专业网站:http://pdcfighting.com/
代码演示通过python的requests,BeautifulSoup库批量下载360图片,并保存在本机的路径
代码如下:
#BeautifulSoup库是网页爬虫解析库,主要用来对HTML源代码进行解析,方便显示并读取相应的标签数据 #1、首先导入相应的库 import requests from bs4 import BeautifulSoup import random import os import time #2、对网站进行get请求 def gethtml(kward): try: url="https://image.so.com" #设置360网站的搜索页面的前面部分网址 kw={"q":kward} #设置关键字变量kw headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36"} # 设置网页请求头 response = requests.get(url, params=kw,headers=headers) ##伪装浏览器对url进行get请求,传递的参数是kw response.encoding=response.apparent_encoding #根据网页内容解析出编码格式并赋值给response.encoding html=response.text #将网页源代码赋值给html soup=BeautifulSoup(html,'html.parser') #使用html.parser对html代码进行解析,并赋值给soup变量 print(soup.head) #打印网页源代码的头部信息 images=soup.find_all('img') #查找源代码里所有的图片标签 path="F://明星照片//"+kward+"//" #设置图片的存储本机的路径 for img in images: #遍历所有的img标签信息 print(img.attrs["src"]) #打印遍历出来的图片表情的src属性值 url1=img.attrs["src"] #设置url1为遍历出来的图片表情的src属性值 response1=requests.get(url=url1,headers=headers) #上行代码伪装浏览器对url1,即图片网站进行get请求并将请求结果赋值给response1 response1.encoding=response1.apparent_encoding #根据网页内容解析出编码格式并赋值给response1.encoding html1=response1.content #将图片网址的二进制源代码赋值给html1 abspath=path+str(random.random())+".jpg" #设置存储路劲为abspath with open(abspath,"wb") as f: #打开文件的绝对路径,并对文件进行写入操作,并设置为f f.write(html1) #将源代码写入f文件 f.close() #关闭f文件 print(img.attrs["src"]+"下载成功") #打印下载成功的提示 time.sleep(0.2) #设置时间休眠0.2秒 except: #如果接受错误时 print("爬取失败") #打印爬取失败
代码运行结果如下图所示:
、要求:
①使用Python的tkinter创建一个下载器
②下载器需要包含图片类型输入框和图片存储路径输入框
③必须要有下载按钮和清空按钮,并执行相应的下载图片和清空输入信息的操作
二、代码如下:
import tkinter
import tkinter as tk
import requests
import time
from lxml import etree
import os
import re
root=tk.Tk()
root.geometry('800x600')
root.title('下载https://www.16pic.com/图片')
l1=tk.Label(root,text='1、请输入图片类型:')
l1.place(x=30,y=10)
v1=tk.StringVar()
e1=tk.Entry(root,textvariable=v1,width=50)
e1.place(x=180,y=10)
l2=tk.Label(root,text='2、请输入图片存储路径:')
l2.place(x=30,y=30)
v2=tk.StringVar()
e2=tk.Entry(root,textvariable=v2,width=50)
e2.place(x=180,y=30)
e2.insert('end','F:\images')
e3=tk.Text(root,width=200,height=100)
e3.place(x=30,y=100)
global headers
headers={"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.3"}
def download(url,path):
response2=requests.get(url=url,headers=headers)
content=response2.content
i=1
today=time.localtime()
filename=str(today)+str(i)+'.jpg'
with open(os.path.join(path,filename),'wb') as f:
f.write(content)
print("{}下载完成".format(url))
def submit():
kw=e1.get()
url='https://www.16pic.com/sucai/tupian_{}_0-0-0-0-0-0-0-0-0_1.html'.format(kw)
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
text=response.text
img_list=re.findall(r'<img src="(.*?)"',text)
for image in img_list:
image=image.split('?')
image=image[0]
if '.jpg' in image:
image_result='http:'+image
# print(image_result)
download(image_result, v2.get())
e3.insert('end', image_result+"下载完成")
e3.insert('end','\n')
submit_button=tk.Button(root,text='开始下载',command=submit)
submit_button.place(x=30,y=60)
def clear():
v1.set('')
v2.set('')
e3.delete(1.0,tkinter.END)
clear_button=tk.Button(root,text='清空',command=clear)
clear_button.place(x=200,y=60)
root.mainloop()
三、使用Pyinstaller命令生成可执行文件运行结果如下图所示:
四、代码运行结果如下图所示:
*请认真填写需求信息,我们会在24小时内与您取得联系。