import requestsimport threadingfrom queue import Queueimport csvclass Producer(threading.Thread): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36' } def __init__(self,url_queue,data_queue): super(Producer, self).__init__() self.url_queue = url_queue self.data_queue = data_queue def run(self): while True: if url_queue.empty(): break url = self.url_queue.get() self.parse_page(url) def parse_page(self, url): res = requests.get(url, headers=self.headers) result = res.json() dat = result['Data']['Posts'] data = {} for item in dat: data['职位'] = item['RecruitPostName'] data['地址'] = item['LocationName'] data['网址'] = item['PostURL'] self.data_queue.put(data)class Consumer(threading.Thread): f = open('腾讯招聘.csv', 'a', encoding='utf-8-sig', newline='') writer = csv.DictWriter(f, fieldnames=['职位', '地址', '网址']) writer.writeheader() def __init__(self,data_queue): super(Consumer, self).__init__() self.data_queue = data_queue def run(self): while True: if data_queue.empty(): break all_data = self.data_queue.get() self.writer.writerow(all_data)if __name__ == '__main__': url_queue = Queue() data_queue = Queue() for i in range(1,11): url = f'https://careers.tencent.com/tencentcareer/api/post/Query?categoryId=&parentCategoryId=40001&&pageIndex={i}&pageSize=10&language=zh-cn&area=cn' url_queue.put(url) p_list = [] for i in range(3): t = Producer(url_queue, data_queue) t.start() p_list.append(t) for p in p_list: p.join() c_list = [] for i in range(3): t = Consumer(data_queue) t.start() c_list.append(t) for c in c_list: c.join()