import requests
import threading
from queue import Queue
import csv
class 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()