1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

たったn個のよくあるやり方 【Webスクレイピング編】

Last updated at Posted at 2020-10-05

はじめに

Webスクレイピングでたまによくあることのメモ。(適宜追加予定)

節子、それスペースやない、C2A0や!

BSで取ってきた文字列(line1)からパターンマッチやparseで項目を取り出そうと思ったらなぜかNone。
同じ文字列を自前で作って(line2)取り出すとこれはちゃんと取り出せる。なんやこれ・・・

print(line1 == line2)
False

しかたないので1文字ずつ比較。

for (c1, c2) in zip(line1, line2):
    print(c1.encode(), end=', ')
    print(c2.encode(), end=' '+str(c1==c2)+'\n')
:
b'\xc2\xa0', b' ' False
:

!?

これがかの有名なC2A0問題です(初めて知った)。いまだにあるんですねぇ、こういう問題。

C2A0問題とは:
HTMLで  (ノンブレークスペース)を使うと一見ただのスペースなんだけど実は違う文字コードが割り当てられてしまう問題。見ただけでは区別がつかない。(困)

Pythonでの処理例が見つからなかったのでメモ。

line = line.encode().replace(b'\xc2\xa0', b'\x20').decode('utf-8')

こんな感じでC2A0を普通の半角スペースに変換してやりたいことはできるようになった。
(いったんencodeしなくてもできるんかな?)

Selenium、ゾンビ作りがち

なぜかいつも使ってるSeleniumのスクリプトが意味のよくわからないエラーで終了するようになった。エラーメッセージでググっていろいろ対処したり調べたりしてもどうもうまくいかない。

ふと思ってプロセス見てみたら大量のゾンビがいた。

% ps aux | grep chrome
:
(大量)
:

全部killしたら何事もなかったように動くようになった。
Seleniumでいろいろと試しながら作っているようなとき、driver.close()しないまま異常終了するとゾンビが残るので注意が必要ですね。(特にHeadlessで動かしてると気づきにくい)

JavaScriptレンダリング後のソースを表示、保存したい

一般にJavaScriptで出力したソースはブラウザの「ソースを表示」機能では見れないのでもやもやするけど、以下の方法で表示、保存が可能。

  • FireFoxの場合

描画後の画面で表示保存したい部分をマウス等で選択し、右クリック「選択した部分のソースを表示」。

  • Chromeの場合

デベロッパーツールを開き、「Elements」タブに表示されるソースの保存したいタグを右クリック「Copy」- 「Copy element」してどっかに貼り付け。(全体を保存したければ先頭の<html>で実行すればおk)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?