这是我写的一个较为简单的爬虫代码,用于爬取美女写真(咳咳,当然是正规网站)只用到了requests库,未用到BeautifulSoup,所以比较简单,适合爬虫初学者看看。后续会出使用requests+beautifulsoup的爬虫案例,及正则表达式的应用案例。请持续关注,谢谢。

  代码中我使用了以下库,大家可以在cmd使用以下代码安装:

pip install Pyside2
pip install requests

  其中,Pyside2是GUI编程库,以后会出Pyside2的教学博客,请持续关注。这里仅简单使用Pyside2,我们需要导入其中的一些类,同时需要os库来创建存放图片的文件夹,requests是必不可少的就不再赘述

from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox, QLineEdit
import requests
import os

  接着我们写好UI窗口所需的代码,先创建一个友好的界面,输入框输入下载图片的数量,案件点击开始下载,下载完毕弹出下载提示:

app = QApplication([])

window = QMainWindow()
window.resize(500, 200)
window.move(300, 310)
window.setWindowTitle('图片保存')

textEdit = QLineEdit(window)
textEdit.setPlaceholderText("请输入图片数量,整数,例:50")
textEdit.move(10,75)
textEdit.resize(300,25)

button = QPushButton('下载', window)
button.move(380,75)
button.clicked.connect(download)

window.show()

app.exec_()

  接着我们需要编写爬取图片所需的代码,这里使用try+except和r.raise_for_status()方法来检测爬取请求报错,这里我在之前的爬虫教程讲过。我的代码不够完善,在后期测试时输入500张图片则会下载出错,可能有些图片的名称与与其不同,我们可以再加一个try+expect来处理异常,若出现名称问题,下载下一张图片,而不是中断执行。下文代码未修改,大家可自行修改:

def download():
	global num
	url_head = 'https://mtl.gzhuibei.com/images/img/'
	url_tail = '/1.jpg'
	url_num = '20800'
	pic_name = '0'
	pic_tail = '.jpg'
	file = 'D:/图片爬取/'
	agent = {'user-agent':'Chrom/81.0.4044.113'}
	num = eval(textEdit.text())

	try:
		while (num):
			path = file + pic_name + pic_tail
			r = requests.get(url_head + url_num + url_tail, headers = agent)
			r.raise_for_status()
			with open(path, 'wb') as f:
				f.write(r.content)
				f.close()
				#print('图片下载成功!')
			url_num = str(eval(url_num) + 1)
			pic_name = str(eval(pic_name) + 1)
			num -= 1
		if num == 0:
			QMessageBox.about(window,'提示','下载成功!\n图片位置在“D:/图片爬取”      ')
		
	except:
		QMessageBox.about(window,'提示','下载失败!')

  接着我们将两部分进行连接,窗口与代码的连接我会在Pyside2的教程讲解,请持续关注。推荐大家使用Pyside2而不是PyQt5,因为Pyside2是Python亲儿子,而PyQt5不是,但他们的类和方法都是一样的,可通用使用,切换不难。
以下是所有源码:

from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox, QLineEdit
from time import sleep
import requests
import os


def download():
	global num
	url_head = 'https://mtl.gzhuibei.com/images/img/'
	url_tail = '/1.jpg'
	url_num = '20800'
	pic_name = '0'
	pic_tail = '.jpg'
	file = 'D:/图片爬取/'
	agent = {'user-agent':'Chrom/81.0.4044.113'}
	num = eval(textEdit.text())

	try:
		if not os.path.exists(file):
			os.makedirs(file)
		while (num):
			path = file + pic_name + pic_tail
			r = requests.get(url_head + url_num + url_tail, headers = agent)
			r.raise_for_status()
			with open(path, 'wb') as f:
				f.write(r.content)
				f.close()
				#print('图片下载成功!')
			url_num = str(eval(url_num) + 1)
			pic_name = str(eval(pic_name) + 1)
			num -= 1
			sleep(0.5)
		if num == 0:
			QMessageBox.about(window,'提示','下载成功!\n图片位置在“D:/图片爬取”      ')
		
	except:
		QMessageBox.about(window,'提示','下载失败!')

app = QApplication([])

window = QMainWindow()
window.resize(500, 200)
window.move(300, 310)
window.setWindowTitle('图片保存')

textEdit = QLineEdit(window)
textEdit.setPlaceholderText("请输入图片数量,整数,例:50")
textEdit.move(10,75)
textEdit.resize(300,25)

button = QPushButton('下载', window)
button.move(380,75)
button.clicked.connect(download)

window.show()

app.exec_()