[Pythonの学習旅は] ---スクリプトをクロールマルチスレッド

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      (メイン)

 

おすすめ

転載: www.cnblogs.com/chenyuxia/p/12535596.html