2017-01-05 23 views
0

現在、私はbeautifulsoupを使用してXML Webページを解析するスクリプトを作成しています。 xmlファイルの例はhereです。スクリプトは基本的に、入力されたキーワードのリストと一致する最初のプロダクトURL(各 'loc'タグから)を出力します。現在、スクリプトの制御フローは以下の通りです:XMLパーサーの高速化

  • スープオブジェクトにURLを渡し、
  • 実行A各URLタグのループのためにそれを美化し、リストに各LOCテキストを置く(inventory_urlは)

    for item in soup.find_all('url'): 
         inventory_url.append(item.find('loc').text) 
    
  • リストを反復し、出力「キーワード」は、キーワードの入力リストであるすべてのキーワードに一致する最初の要素

    for item in inventory_url: 
         if all(kw in item for kw in keywords): 
          return item 
    

構文解析を高速化する方法があるのだろうかと思います。私はスープトレーナーを見てきましたが、私が 'loc'タグだけを見つけるために分離すると、必要のない 'image:loc'タグも取り込まれます。

ありがとうございました。

+0

xmlを解析するために[lxml](https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser)を使用しましたか? –

+0

まだありません。あなたの提案をありがとう – JC1

+1

構文解析がボトルネックであると確信していますか?インターネットからウェブページを取得している場合は、そのページを解析するよりも1000倍以上時間がかかると思われます。 –

答えて

-1

違うパーサーを試しましたか?あなたに単純なテキストファイルをストリーミングすることができる場合[\S\s]*?がに怠惰な方法です...私は正規表現はかなり速いだろうと推測、

import re 

pattern = re.compile(r'<url>[\S\s]*?<loc>([\S\s]*?)</loc>[\S\s]*?</url>') 

for match in re.finditer(pattern, file.read()): 
    #do stuff 

Speeding up beautifulsoup