Python3 beautiful soup4 で スクレイピングしているのですが
IDが元ソースに付与されておらず、取得したい部分が<li> </li>ばかりで、またページにより 項目数<li>の数が変わるので、決まった値を取得するのに難航しています。
唯一 styleでwidth 40 width60 とで 見出しと値が対になって判別できる為
これを見出しと値を 対にして 辞書型にすれば解決できるのではと思いました。
<li><li>タグではなくテーブルタグ <th></th> <tr></tr>で見出しと値が対になっている場合は 下記方法でできるので、これを応用して<li>のスタイル width 40 width 60% で判別してできないかと考えたのですが・・ ```HTML thとtdが見出しと値で対になっている場合はできる dict={} for tag in soup.find_all(['th', 'td']): if tag.name == 'th': key = tag.get_text() elif tag.name == 'td': dict[key] = tag.get_text() ```html
1<ul> 2 3<li style="width: 40%;">見出し1</li> 4<li style="width: 60%;">値1</li> 5<li style="width: 40%;">見出し2</li> 6<li style="width: 60%;">値2</li> 7<li style="width: 40%;">見出し3</li> 8<li style="width: 60%;">値3</li> 9<li style="width: 40%;">見出し4</li> 10<li style="width: 60%;">値4</li> 11<li style="width: 40%;">見出し5</li> 12<li style="width: 60%;">値5</li> 13 14</ul>
おなじようにliタグのスタイル width 40 or width60 で判別して
見出し と値で辞書にしたいです
やってみたこと
Python
1dict={} 2for tag in soup.find_all([('li',style="width: 40%;"), ('li',style="width: 60%;")]): 3 if tag.name == ('li',style="width: 40%;"): 4 key = tag.get_text() 5 elif tag.name == ('li',style="width: 60%;"): 6 dict[key] = tag.get_text()
if tag.name == ('li',style.value'width: 40%;'):
^
SyntaxError: invalid syntax
python
1dict={} 2for tag in soup.find_all([soup.find_all('li' ,style=lambda value: value and 'width: 40%;' in value and 'width: 60%;' in value)]): 3 if tag.name == ('li',style.value'width: 40%;'): 4 key = tag.get_text() 5 elif tag.name == ('li',style="width: 60%;"): 6 dict[key] = tag.get_text()
エラー内容
File "<ipython-input-51-b737eb51cd68>", line 3
if tag.name == ('li',style.value'width: 40%;'):
^
SyntaxError: invalid syntax
##この方法に拘っていませんが・・
※参照元ページは各ページで <li>の数が異なるのでsoul.select でCSSセレクターで取得すると、各ページで変数に入る値が異なるので、見出しをキーにして値を取り出したいです
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/22 09:39
2021/07/23 08:50