# 執行緒程序
import requests
import threading
import json
from queue import queue
import time
##寫子類
class thread_crawl(threading.thread):
def __init__(self,name,page_queue):#初始化
threading.thread.__init__(self)
#拿到任務的佇列
self.page_queue = page_queue
self.name = name
def run(self):
while true:
if self.page_queue.empty():
break
else:
print(self.name,'將要從佇列中去任務')
page = self.page_queue.get()
print(self.name,'取出的任務是:',page)
url=''.format(page)
self.get_content(url=url)
print(self.name, '完成任務的頁碼是:', page)
def get_content(self,url):
headers=
response=requests.get(url=url,headers=headers)
self.get_data(response)
def get_data(self,response):
# 將我們的json字串轉化為標準的python資料格式
data=json.loads(response)
# 提取資料的字典:
data_list=data['data']['posts']
for i in data_list:
# 崗位名稱
name= i['recruitpostname']
countryname=i['conutryname']
infor = 'name:'+name+'--'+'countryname:'+countryname
with open('job.txt','a',encoding='utf-8') as fp:
fp.write(infor)
if __name__ == '__main__':
#任務開始時間
# 建乙個佇列
page_queue = queue()
for page in range(1,61):
page_queue.put(page)
# 生成執行緒:
crawl_name = ['c1','c2','c3']
crawl_tread = #如果沒有這個列表 程式只會執行從 c1 乙個執行緒。
# for i in range(10):
#for name in crawl_name:
crawl = thread_crawl(name,page_queue)
crawl.start()
#堵塞主線程,讓子執行緒都完成任務後,主線程在往下執行
for thread in crawl_tread:
thread.join()
#結束時間
t_end=time.time()
print(t_end)
爬蟲多執行緒
多執行緒在之前的scrapy裡面已經接觸過了,就是裡面的yiled,開啟乙個新的執行緒。但是這是這是基於這個高階框架的,用的時候只知道這是開啟了乙個新的執行緒,並不是很清楚到底是怎麼執行的。而在python裡面有包 import threading引入這個包之後就可以寫自己的多執行緒了 寫多執行緒的...
多執行緒爬蟲
python標準庫是執行緒之間常見的資料交換形式 queue的使用可以確保python的執行緒安全 q queue.queue maxsize 建立佇列,並可以指定大小 q.empty 判斷佇列是否為空 q.full 判斷佇列是否滿 q.put data 向佇列中放入資料 q.get 從佇列中拿資料...
爬蟲 多執行緒
個執行緒寫 個執行緒讀取,沒問題,如果兩個執行緒都寫 呢?import threading import time import dis num 0def demo1 nums global num for i in range nums num 1print demo1 d num defdemo...