. 1 Importación Pide 2 Importación Time 3. Importación de roscado 4. Importación de cola 5. De lxml importación etree 6. # "Https://ishuo.cn/duanzi" 7. # Cabecera = { "el Agente User--": "el Mozilla / 5.0 (Windows NT 10,0; Win64; x64-) AppleWebKit / 537.36 (KHTML, como el Gecko) la Chrome / 80.0.3987.87 Safari / 537.36 "} . 8 # páginas rastreadas rastreo web hilo --- lista pieza se encuentra, en la cola 9. clase Mythread1 (de la threading.Thread ): 10 DEF la __init__ (Ser, threaName, pageQueue, DataQueue): 11. . De la threading.Thread la __init__ (Self) 12 es self.threaName = threaName # nombre hilo 13 es self.pageQueue = pageQueue # cola página 14 self.dataQueue DataQueue = # datos de la cola 15 self.headers = { " Agente User-- " : " el Mozilla / 5.0 (Windows NT 10,0; Win64; x64-) AppleWebKit / 537.36 (KHTML, como el Gecko) Chrome / 80.0.3987.87 Safari / 537.36 " } 16 17. DEF RUN (Ser): 18 es de impresión ( " iniciar el subproceso " , self.threaName) . 19 al mismo tiempo que no vlog1: 20 es la prueba : 21 es Página = self.pageQueue.get () 22 es el URL = " https://ishuo.cn/duanzi " 23 es de datos = requests.get (URL, cabeceras = self.headers) .text 24 la time.sleep (0.5 ) 25 self.dataQueue.put (datos) # datos puestos en la cola de datos 26 es el excepto excepción AS E: 27 Pass 28 Imprimir ( " rosca del extremo " , self.threaName) 29 30 31 # Analytical --- hilo página fuera de la lista de colas de página, analiza y almacena el local de 32 clase Mythread2 (de la threading.Thread): 33 es DEF la __init__ (Self, threaName, DataQueue, nombre de archivo): 34 es de la threading.Thread. la __init__ (Self) 35 self.threaName = threaName 36 self.dataQueue = DataQueue 37 [ self.filename = nombre de archivo 38 es 39 DEF RUN (Self): 40 Imprimir ( " iniciar hilo " , self.threaName) 41 es el tiempo No vlog1: 42 es el try : 43 es Datal self.dataQueue.get = () # cola extrajeron los datos 44 es HTML = etree.HTML (Datal) 45 node_list = html.xpath ( ' // div [@ class = "info"] / A ' ) # Obtener página esta página todos los requisitos un sello 46 es # impresión (node_list) 47 de nodo en node_list: 48 DATOS2 = Node.text # adquirir información de forma secuencial de una etiqueta 49 self.filename.write (DATOS2 + " \ n " ) # información de escribir en el archivo 50 la excepción Excepción AS E: 51 es Pass 52 es de impresión ( " hilo Fin " , self.threaName) 53 es 54 es 55 56 es 57 es vlog1 = False # determina si la cola está vacía página 58 vlog2 = False # determina si la cola de datos está vacía 59 60 61 es DEF main (): 62 es # página de la cola 63 es pageQueue Queue.Queue = (1. ) 64 pageQueue.put (1. ) 65 # cola de almacenamiento los datos del resultado adquiridas 66 DataQueue = Queue.Queue () 67 # guarda en un archivo 68 filename = Open (& lt R " D: \ Software \ Python \ python_work \ Python_day18 \ 123.txt " , " A " ) 69 # comienzan hilos 70 T1 = Mythread1 ( " hilo adquisición " , pageQueue, DataQueue) 71 es t1.start ( ) 72 T2 = Mythread2 ( " análisis de hilo " , DataQueue, nombre de archivo) 73 es t2.start () 74 # final del hilo principal 75 # cuando pageQueue está vacía, el extremo del hilo de adquisición 76 al mismo tiempo que no pageQueue.empty (): 77 Pass 78 Globalvlog1 79 vlog1 = Verdadero 80 81 # cuando DataQueue está vacía, el fin de analizar el hilo 82 al mismo tiempo que no pageQueue.empty (): 83 Pass 84 Global vlog2 # definen variables globales 85 vlog2 = Verdadero 86 87 t1.join () 88 t2.join () 89 filename.close () # cuando los dos hilos de ejecución del primer archivo 90 de impresión ( " fin! " ) 91 es 92 93 94 iF el __name__ == ' __main__' : 95 main ()