线程一:获取所有列表页
线程二:解析所有列表页,获取每个列表页的主题页
线程三:解析主题页,获取主图页的每个详情页页码
线程四:解析每个详情页,获取想要的数据保存本地
代码实现:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/04 10:33
# @Author : huni
# @File : 四线程分工明确.py
# @Software: PyCharm
from threading import Thread
from queue import Queue
import requests
from lxml import etree
import os
from urllib import parse
# 获取列表页
class CrawlInfo(Thread):
#重写构造函数
def __init__(self,url_queue,html_queue):
Thread.__init__(self)
#声明两个类属性
self.url_queue = url_queue
self.html_queue = html_queue
def run(self):
#爬虫代码
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36'
}
while self.url_queue.empty() == False: #当url队列中不是空的就继续爬
url = self.url_queue.get() #从队列中获取一个url
reponse = requests.get(url=url,headers=headers)
if reponse.status_code == 200:
self.html_queue.put(reponse.text) #访问成功把html文件放进html队列中
#获取单页面的主题列表
class ParseInfo(Thread):
def __init__(self,html_queue,detail_queue):
Thread.__init__(self)
self.html_queue = html_queue
self.detail_queue = detail_queue
def run(self)