这一章,咱们通过实战来运用多线程爬虫,就来爬取目前最火的王者荣耀游戏的皮肤。看看跟普通爬虫方式相比,会不会更快捷。
关于普通方式爬取,大家可以看看这篇文章:Python爬虫实战之 爬取王者荣耀皮肤
第一步,定义生产者
第二步,定义消费者
第三步,定义主线程函数
生产者和消费者的概念,咱们在之前就已经讨论过,这里生产者就是生产图片名称及url,消费者就是通过生产者生产的名字、url来保存图片文件,这就是整个多线程爬虫的思路。
第一步,定义生产者
1.先导入几个模块、参数:
import requests
from urllib import parse
import os
from urllib import request
import threading
import queue
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36','referer':'https://pvp.qq.com/web201605/wallpaper.shtml'
}
2.通过定义类、继承参数、run方法来定义生产者
super() 能动态拿到父类的初始化属性,继承于父类,而父类要加上不定常参数(位置参数和关键字参数),之后就能初始化要用到的参数:
class Producer(threading.Thread):
def __init__(self,page_queue,image_queue,*args,**kwargs):
super(Producer,self).__init__(*args,**kwargs)
self.page_queue = page_queue # 多页队列
self.image_queue = image_queue # 图片队列
def run(self) -> None:
# 当队列不为空的时候才能从中取值
while not self.page_queue.empty():
page_url = self.page_queue.get