サイトを解析するためのマルチスレッドデータ処理のPython実装

解析プロセスは、データ処理に費やされるかなりの時間のために複雑になります。 マルチスレッドにより、データ処理の速度が大幅に向上します。 解析用のサイトは「世界銀行券のディレクトリ」で 、他の通貨との関係で通貨を取得します。



処理時間を半分にするためにプログラムコードを持ち込みます。



インポート



import requests # HTTP- from bs4 import BeautifulSoup #  HTML import csv #    CSV from multiprocessing import Pool #   
      
      





主な手順



 def main(): url = 'http://banknotes.finance.ua/' links = [] #        all_links = get_all_links(get_html(url), links) #  #  help with Pool(2) as p: p.map(make_all, all_links) if __name__ == '__main__': main()
      
      





URLを取得



 def get_html(url): r = requests.get(url) return r.text
      
      





マルチスレッド機能



 def make_all(url): html = get_html(url) data = get_page_data(html) write_csv(data)
      
      





ホームページのURLを取得する



 def get_all_links(html, links): #   -    f=open('coin.csv', 'w') f.close() #  html-,       soup = BeautifulSoup(html, 'lxml') href = soup.find_all('div', class_= "wm_countries") for i in href: for link in i.find_all('a'): links += [link['href']] return links
      
      





ネストされたページの解析



 def get_page_data(html): soup = BeautifulSoup(html, 'lxml') try: name = soup.find('div', 'pagehdr').find('h1').text except: name = '' try: massiv_price = [pn.find('b').text for pn in soup.find('div', class_ = 'wm_exchange').find_all('a', class_ = 'button', target = False)]+[pr.text for pr in soup.find('div', class_ = 'wm_exchange').find_all('td', class_ = 'amount')] if len(massiv_price)==6: massiv_price=massiv_price[0]+massiv_price[3]+massiv_price[1]+massiv_price[4]+massiv_price[2]+massiv_price[5] elif len(massiv_price)==4: massiv_price=massiv_price[0]+massiv_price[2]+massiv_price[1]+massiv_price[3] except: massiv_price = '' data = {'name': name, 'price': massiv_price} return data
      
      





ファイルレコード



 def write_csv(data): with open('coin.csv', 'a') as f: writer = csv.writer(f) writer.writerow( (data['name'], data['price']) )
      
      





提案されたコードは、サイトの機能を考慮に入れて、解析に(だけでなく)広く使用できます。



All Articles