この間からスクレイピングができなかったりおかしいなと思ってたら'html.parser'のタグ補完が原因でした。
import urllib.request from bs4 import BeautifulSoup url = "http://www.police.pref.ehime.jp/sokuho/sokuho.htm" html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, 'html.parser', from_encoding='cp932') print(soup.prettify())
後半は/ddと/dtだらけでスクレイピングできません。
Beautiful Soup Documentation — Beautiful Soup 4.4.0 documentation
パーサーを'html5lib'に変更
import urllib.request from bs4 import BeautifulSoup url = "http://www.police.pref.ehime.jp/sokuho/sokuho.htm" html = urllib.request.urlopen(url).read() soup = BeautifulSoup(html, 'html5lib', from_encoding='cp932') print(soup.prettify())
Chromeの右クリック
検証
目的のタグを右クリック
Copy-Copy selector
body > table:nth-child(7) > tbody > tr:nth-child(4) > td:nth-child(5) > table > tbody > tr:nth-child(6) > td
- nth-childを
- nth-of-typeに変更するとBeautifulsoupで取得できます。
td = soup.select('body > table:nth-of-type(7) > tbody > tr:nth-of-type(4) > td:nth-of-type(5) > table > tbody > tr:nth-of-type(6) > td')
要素名.クラス名
要素名[属性名= "属性値"]
で真ん中のddを取得したいとき
tbody > tr > td > dl > dd:nth-child(3n + 2)
tbody > tr > td > dl > dt+dd
tbody > tr > td > dl > dt+dd