2017-07-19 2 views
0

複数のスレッド(例:5スレッド)の指定されたURLからタイトルを削り取り、1つのテキストファイルに保存します。それを行う方法と出力を1つのファイルに安全に保存する方法を教えてください。マルチスレッドスクラップHtmlと安全に1つのファイルに保存

これは私のコードです:私は先物
1.プール
2. sumbit機能を作成するには、使用する

import csv 
import requests 
requests.packages.urllib3.disable_warnings() 

urls = [] 

with open('Input.csv') as csvDataFile: 
    csvReader = csv.reader(csvDataFile) 
    for row in csvReader: 
     urls.append(row[1]) 

def find_between(s, first, last): 
    try: 
     start = s.index(first) + len(first) 
     end = s.index(last, start) 
     return s[start:end] 
    except ValueError: 
     return "" 

def get_title(url): 
    try: 
     r = requests.get(url) 
     html_content = r.text.encode('UTF-8') 
     title = find_between(html_content , "<title>", "</title>") 
     return title 
    except: 
     return "" 

for url in urls: 
    f = open('myfile.txt', 'a') 
    f.write(get_title(url) + '\n') 
    f.close() 
+0

から
3. GET結果をパラメータあなたはasyncioを使うでしょうが、もしあなたがpython3の世界にいるなら、将来のマルチプロセスを使うことができます。私はあなたにそれを書くのが面倒です。あなたのスクリプトで作業hahaha – Hamuel

答えて

1

試してみると機能

import csv 
from concurrent import futures 
pool = futures.ThreadPoolExecutor(5) 
workers = [pool.sumbit(get_title,url) for url in urls] 
while not all(worker.done() for worker in workers): 
    pass 
with open(file) as f: 
    w = csv.writer(f) 
    w.writerows([[worker.result()] for worker in workers]) 
+0

、それはすべての労働者が完了した後ファイルに保存されます。 作業を終えた後、待たずにどのように保存できますか? –

+0

@TutikMasfiyahは難しいです、あなたはロックが必要です。 – galaxyan

関連する問題