Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8577

Beautiful Soupで数字始まりのidをselectする

$
0
0

急いでいる人用

  • BeautifulSoup 4.7.0 以降で以下の処置が必要です。
  • cssエスケープで記述します。
  • 先頭の1\\31にエスケープすると記述できます。
  • 0〜9までの数字は \\30〜 \\39のようにエスケープします。
  • 1234の場合は \\31 234として、先頭の1桁をエスケープしてスペースを入れます。
from bs4 import BeautifulSoup
html = '<h1 id="1">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('#\\31')
# >>> [<h1 id="1">test</h1>]
from bs4 import BeautifulSoup
html = '<h1 id="0123">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('#\\30 123')
# >>> [<h1 id="0123">test</h1>]

BeautifulSoup 4.6.xでの動作

  • cssエスケープなしでヒットします。
  • cssエスケープをするとヒットしません。
from bs4 import BeautifulSoup
html = '<h1 id="1234">test</h1>'
soup = BeautifulSoup(html,'lxml')
soup.select('h1#1234')
# >>> [<h1 id="1234">test</h1>]

BeautifulSoup 4.7.0以降の変更

BeautifulSoup 4.7.0からcss slector のparserの実装がBeautifulSoup独自からsoupsieveに変更になりました。
これにより、複雑なcssセレクタや最新のcssセレクタに対応できるようになっているようです。
https://github.com/facelessuser/soupsieve

cssエスケープ

こちらの記事が大変参考になりました。
https://qiita.com/ka-ko/items/feacb4d3ff22666d51b1

cssエスケープを行うツールも紹介されています。
https://mothereff.in/css-escapes


Viewing all articles
Browse latest Browse all 8577

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>