質問: sys.argv[1]: print(title1.findAll('h2') ``` というようにすると空のリストが出力されてしまいます。
回答: 質問で提示されたhtmlには閉じられていないタグが含まれますが、`...`のようにタグが閉じられているhtmlを用いる前提で記述します。 提示されたhtmlは入れ子になっていないので、findAllを使って`h1`の中にある`h2`は取得できません。 下記のような構造ならば`title1.findAll('h2')`で`h2`が取得できます。 ``` 入れ子! ``` 今回のような並列構造では、`find_next_sibling`を使って条件付きで隣のタグを取得する必要があります。 下記のようなコードで、目的の本文を取得できそうです。 ``` from bs4 import BeautifulSoup soup = BeautifulSoup(open('test.html'), 'html.parser') #textで指定する各タイトルは、変数やコマンドライン引数に書き換えてください h3 = soup.find('h1', text='タイトル').find_next_sibling('h2', text='サブタイトル').find_next_sibling('h3', text='サブサブタイトル') ul = h3.find_next_sibling('ul') for li in ul.findAll('li'): print(li.text) ``` ただし上記のコードは`find_next_sibling`で、見つかったタグの下にあるタグをすべて見つけるため、下記のような問題が発生する可能性があります。 タグが必ず存在する前提ならば問題ありませんが、そうでなければ`find_next_sibling`にtextの条件を追加せず、for文などを使って範囲の洗い出しをするよう改修してください。 ``` タイトル サブタイトル サブタイトル2 サブサブタイトル ```