爬蟲多執行緒

2021-09-21 18:32:51 字數 1769 閱讀 4138

# 執行緒程序

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...