CSSセレクタとBeautifulSoupの解析結果が違う???
Python、BeautifulSoupでスクレイピングのコードを書いていた時のことです。
あるページのdiv.hugahugaをスクレイピングしたく、ChromeのコンソールからCSSセレクタで実行したところ問題ないかなと思いました。
$$('div.hugahuga'); >[5]
(ちゃんと5件取れてる!OK!)
しかし、BeautifulSoupで同じようにやってみたところ、なぜか4件しか取れず困惑。
results = soup.find_all("div", class_="hugahuga") len(results) #=>4
なぜ???
確認してみましたが、特に関数やパラメータが間違っているわけでもなく、ページ取得が失敗しているわけでもありませんでした。
色々試してみた結果、BeautifulSoupの解析器をlxmlからhtml5libに変えてみたところ、無事全件取得することができました。
今まで何も考えず脳死でlxmlを使ってきて初めて痛い目を見ました。ちゃんと確認しないとダメですね……。
小林泰三『完全・犯罪』を読んで
SF・ミステリ作家の小林泰三の短編集「完全・犯罪」を読んでの感想です。
全体の感想
短編5作品を収録した短編集。ジャンルはSF、ミステリー、ホラーと多種多様。
特に好きなのは「双生児」「隠れ鬼」
双生児は一卵性双生児の双子の話、『私たちはあらゆるものを共有していた。』の一文が最後のオチの伏線になっているのは見事。ホラー色が強いSF
隠れ鬼はホラー。ある日浮浪者に追われた体験で、子供の頃の鬼ごっこの出来事を思い出す。鬼ごっこの背景に関する考察がとても面白い。鬼ごっこに明確なルールはない、だから明文化はされず子供達の阿吽の呼吸によってルールが作られる。このルールを利用することで一人の子供をいじめることができる。というのは納得してしまった。
以下、作品ごとの感想になります。
読んで良かったと思う本一覧
タイトル通り読んで良かったと思う本を、つらつら書いていきます。
その都度、更新していきます。
コンテナアルゴリズムremoveやuniqueで削除する時の注意点
`remove`や`unique`は要素を削除するが、コンテナの長さは変更されない。
そのため、アルゴリズム適用後は、いらない長さを`erase`関数で削除する必要がある。
std::vector<int> v; v.erase( std::remove_if( changeNums.begin(), changeNums.end(), [](int x){ return x >= 5; } ), v.end() );
std::vector<int> v; v.erase( std::unique( changeNums.begin(), changeNums.end() ), changeNums.end() );
宣言とnewの違い
1.宣言
Vector v; double len = v.length();
- C++ではクラスを宣言すると引数なしのコンストラクタが自動で呼び出される。
- 呼び出されたフィールドにアクセスするには.(ドット)を使う。
- オブジェクトはスタック領域上に実体が作成される。そのため宣言されたスコープを抜けると自動的に破棄される。
2.new演算子
Vector* v = new Vector(); double len = v->length(); delete v;
- 呼び出されたフィールドにアクセスするには->(アロー)を使う(ポインタなので)。
- オブジェクトはヒープ領域上に実体が作成される。 そのためnewを使用して作成されたオブジェクトは、deleteを使用して削除するまで残る。