1 インポート要求 2 インポート時間 3。 インポートスレッド 4。 インポートキュー 5 から lxmlのインポートetree 6。 #"https://ishuo.cn/duanzi" 7。 #ヘッダ= { "User--剤":の「Mozilla / 5.0(Windows NTの10.0。 Win64の、ヤモリ様x64-)のAppleWebKit / 537.36(KHTML)クローム/ 80.0.3987.87サファリ/ 537.36「} 8つの。 #のページはピースリストをキューに、配置されている---ウェブクロールスレッドをクロール 9。 クラスMythread1(threading.Threadの): 10 DEF __init__ (セルフ、threaName、pageQueue、DataQueue) 。11 。threading.Threadの__init__ (自己) 12である self.threaName = threaName #スレッド名 13である self.pageQueue = pageQueue #ページキュー 14 self.dataQueue DataQueue = #データがキュー 15 self.headers = { " User--エージェント":" Mozillaを/ 5.0(Windows NTの10.0; Win64の、x64-)のAppleWebKit / 537.36(KHTMLは、ヤモリのような)クローム/ 80.0.3987.87サファリ/ 537.36 " } 16 17。 DEF RUN(自己): 18が 印刷(" スレッド開始」、self.threaName) 19 ながら ないのvlog1: 20は 試してみる: 21です ページ= self.pageQueue.get() 22がある URL = " https://ishuo.cn/duanzi " 23がある データ= requests.get(URL、ヘッダ= self.headers)の.text 24 time.sleep(0.5 ) 25 self.dataQueue.put(データ) #のデータキューに入れデータ 26がある 以外例外としてE: 27の パス 28 印刷(" エンド・スレッド" 、self.threaName) 29 30 31 #分析---キューリストページ、構文解析及び格納のアウトページスレッドローカルな 32 クラス(threading.Threadの)Mythread2: 33である DEF __init__ (セルフ、threaName、DataQueue、ファイル名): 34である threading.Threadました。__init__ (自己) 35 self.threaName = threaName 36 self.dataQueue = DataQueue 37 self.filename = ファイル名 38は、 39 DEF RUN(自己): 40 プリント(" スレッド開始" 、self.threaName)が 41であり ながら ずvlog1: 42であります 試し: 43は DATAL self.dataQueue.get =() #抽出されたデータキュー 44は、 HTML = etree.HTML(DATAL) 45 考えます。node_list = html.xpath(' // divの[クラス@ = "情報"] / A ')#取得ページこのページのすべてのラベル予選 46がある #印刷(考えます。node_list) 47 のためのノードで考えます。node_list: 48 DATA2 = Node.textの #順次ラベルの情報取得 49 self.filename.writeを(DATA2 + " \ N- ")#ファイルへの書き込み情報 50を 以外例外としてE: 51である パス 52れる プリント(" エンド・スレッド" 、self.threaName) 53が 54である 55 56である 57である vlog1 = Falseの #は、キューが空ページであるか否かを判断する 58 vlog2 = Falseの #は、データ・キューが空であるか否かを判断する 59 60 61 IS DEF メイン(): 62は #ページキュー 63で pageQueue Queue.Queue =(1 ) 64 (1 pageQueue.put ) 65 #の店舗取得結果データキュー 66 DataQueue = Queue.Queue() 67 #がファイルに保存 68 =オープン(R&LTファイル名" :\ SOFTWARE \ Pythonの\ python_work \ Python_day18 \ 123.txt D "、" A " ) 69 位のスレッド開始 70 T1 = Mythread1(" 取得スレッド" 、pageQueue、DataQueue) 71である t1.start( ) 72 T2 = Mythread2(" 構文解析スレッド" 、DataQueue、ファイル名) 73である (t2.start) 74 #のメインスレッドの端部 75 #取得スレッドのpageQueueが空、末端 76 ながら ませんpageQueue.empty(): 77 パス 78 地球vlog1 79 vlog1 = Trueの 80 81 #スレッド解析のdataQueueが空、末端 82 つつ ていないpageQueue.emptyを(): 83 パス 84 グローバル vlog2の #は、グローバル変数定義 85 vlog2は= 真 86 87 t1.join() 88 t2.joinを() 89 filename.close() #2つのスレッドが閉じるファイルの実行 90 印刷(" 終わり!" ) 91が 92 93 94 場合は __name__ == " __main__を" : 95 (メイン)