LoginSignup
12
11

More than 5 years have passed since last update.

python3でWebページのスクレイピング with BeautifulSoup4

Last updated at Posted at 2017-07-27

注意:全く同様の記事がはてなブログ上にも存在する.筆者の個人的な都合上,両方で公開した.

やったこと:ニュースサイトのスクレイピング

ニュースサイトに対してスクレイピングを行い,記事のタイトルと記事本体を拾い上げてくるプログラムをpython3で書いた.

対象

今回は,ニュースアプリのGunosyの記事を対象にスクレイピングを行なった.

環境

  • python 3.6.1
  • その他使用したライブラリ
  • ssl <- もともと入っている
  • urllib <- もともと入っている
  • BeautifulSoup4

やり方

前準備:あらかじめ,ニュースの記事のサイトのHTMLから取り出したい部分を探しておく.

ブラウザのディベロッパツールなんかを使うと取り出すのが簡単になるのでオススメ.
htmlコードを調べると,ページ上の該当部分に色がついて見える.

ex.) GoogleChrome なら,メニューバー>表示>開発/管理>ディベロッパーツール

①URLを入力させる

pythonのinput()でサイトURLを入力させ,urlに格納.

input_url
print("カテゴリ分類を行いたい記事のURLを入力してください.")
url = input()

②URLのソースコードを取り出す

sslを使って,SSLエラーを回避しながらページのソースurllibを用いてhtml内に格納

get_src
import ssl
import urllib
ssl._create_default_https_context = ssl._create_unverified_context #SSL証明書が正しくない場合にはエラーとなる。以下を追加することで、対応できる。
html = urllib.request.urlopen(url).read() #上記で取り出したurlを使用する.

③ソースコード内から該当部分を取り出す.

soupにページ全てのhtmlの元が入っており,BeautifulSoupを使ってその中から該当する部分のみを取り出す.

該当する部分は,前準備の時に取り出したものである.ちなみに,BeautifulSoupではXpathを使えないようなので注意されたい.

また,.get_text()を用いて文字データを抽出し,title, articleの中に格納した.

get_title_and_article
soup = BeautifulSoup(html,"lxml")

title_part = soup.find_all("h1", {"class": "article_header_title"})
article_part = soup.find_all("div", {"class": "article gtm-click"})

title = title_part[0].get_text()
article = article_part[0].get_text()

まとめ

基本的にこの要領で行えば,スクレイピングできるようである.lxmlパッケージなども用意されているが基本的には,BeautifulSoupで事足りそうである.

参考サイト

[http://www.mnsite.com/python%E3%81%A7ssl%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E7%99%BA%E7%94%9F%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AE%E5%AF%BE%E5%87%A6%E6%96%B9%E6%B3%95]

[http://qiita.com/yhashizaki/items/c996297a80024bcaa2eb]

12
11
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
12
11