2017-12-07 21 views
1

子タグの特定のグループが完全に解析されないという問題が発生しています。私はこれと同じロジックを他のタグに従っていますが、私が望むタグの最初のエントリ以外のすべてをスキップすることはできません。私print(data)は、各反復の後に、それは私だけ、私たちすべての下の各メイン分類の最初のエントリタグを与えたらPythonがBeautifulSoupで解析中にXML子ノードをスキップする

for xml_string in separated_xml(infile): 

    soup = BeautifulSoup(xml_string, "lxml") 

     us_grant = soup.findAll("us-patent-grant") 

     with open('./output.csv', 'ab+') as f: 
      writer = csv.writer(f, dialect = 'excel') 

      for info in us_grant: 

       data = [] 
       us_class_search = soup.findAll("us-field-of-classification-search") 

       for item2 in us_class_search: 

       if item2.find("classification-national"): 

        country_search = item2.find("country") 
        main_class_search = item2.find("main-classification") 

        data.append((country_search).text) 
        data.append((main_class_search).text) 
       print(data) 

:私の現在のスクリプトの基本的なスニペットは次のようになります--patent-grant親;しかし、もっと多くがあります。私はそれを取る場合でも、それはまだITEM2ループため同じことを実行するためITEM2の文が正常にフォロースルーしない場合ことを知っている

<us-field-of-classification-search> 
<classification-national> 
<country>US</country> 
<main-classification>D 1100-130</main-classification> 
<additional-info>unstructured</additional-info> 
</classification-national> 
<classification-national> 
<country>US</country> 
<main-classification>D 1199</main-classification> 
</classification-national> 
<classification-national> 
<country>US</country> 
<main-classification>426 5</main-classification> 
</classification-national> 
<classification-national> 
<country>US</country> 
<main-classification>426 76</main-classification> 
</classification-national> 
</us-field-of-classification-search> 

:たとえば、これらのタグを持つXMLファイルは次のようになります方法;それぞれの下の最初のタグだけを見つけて追加します。これは、ループ自体が実行されず、各インスタンスを見つけ出し、最初のタグをすべてのものとして扱うループでなければならないことを意味します。

アイデア?私は論理に明白な欠陥を見ません。

あなたはXML自体を見たい場合、あなたはそれhere on USPTO

答えて

1

item2だけで、あなたのサンプル中の1つが存在するのすべての<us-field-of-classification-search>の要素を、反復処理されて見つけることができます。

このループ内では、<classification-national>要素を反復処理する必要がありますが、最初の要素だけを調べています。

+0

if文でこれを処理してはいけませんか?私は他の親タグと同じ型の解析を行い、if文は繰り返しタグのすべてのインスタンスが確実に収集されるようにします。私は同じファイルの別のタグのためにそれを使用し、それは動作します。 – HelloToEarth

+0

'if'ステートメントはループを起こさせません。私はあなたが 'item2'ループが何回繰り返しているのか不明確だと思います。デバッガのコードをステップ実行して、何が起きているのかを確認します。 –

+0

ありがとうございます。これは、item2.findAll( "classification-national")ループの 'for for items 'を単純に導入して、すべてのタグを取得したという問題でした。 – HelloToEarth

0

簡単な修正を導入forループ:私は親の内部の各コンポーネントをヒットする可

for items in item2.findAll("classification-national") 

関連する問題