知恵を貸してください。
やりたいこと
タイトルについて、同じ階層に同じタグが存在している場合のスクレイピング方法に悩んでいます。
具体的に、下記参照のhtmlにおいて、1つ目のtbodyタグを無視し2つ目のtbodyタグ内のtrタグをfind_allによって全てリスト型で取得したいです。
html構造
<div class = 'contents'> <tbody> #ここを無視 <tr> : : <tbody> #ここのtbody内のtrタグをfind_allによってリスト型で取得したい <tr> : : </div>
試したコード
html = requests.get(link) soup = BeautifulSoup(html.content, 'html.parser') elme = soup.find('div', class_='contents') tbodies = elme.find_all('tbody') pprint.pprint(tbodies) #tbodiesの確認 del tbodies[0] pprint.pprint(tbodies) #0インデックスのリスト削除後のtbodiesの確認
上記のようにclass_='contents'を指定し、一度find_allでtbody情報をすべて取得し、その後 del リスト名[0]で1つ目のtbody情報を消してみました。
結果
[<tbody><tr>~~</tr><tr>~~</tr>・・・・</tr></tbody>,<tbody><tr>~~</tr><tr>~~</tr>・・・・</tr></tbody>] [<tbody><tr>~~</tr><tr>~~</tr>・・・・</tr></tbody>]
結果は2つ目のtbody内の情報は取得できるものの1まとまりのstr型?となってしまい、trタグごとのリスト型として取得できておりません。
なお、まとめて取得した後delやpopで位置を指定す不必要なtrタグを消すことも1つの手段だと思われるのですが、スクレイピング対象ページが複数あり、ページ毎に1つ目のtbody内のtrタグ数が異なっているので、1回毎に消す作業は効率的でないので避けたいところです。
よろしくお願いいたします。
あなたの回答
tips
プレビュー