Python Scrapingに挑戦1
概要
pythonのscrapingに挑戦
参考書籍
Pythonによるスクレイピング&機械学習 開発テクニック BeautifulSoup,scikit-learn,TensorFlowを使ってみよう
- 作者: クジラ飛行机
- 出版社/メーカー: ソシム
- 発売日: 2016/12/06
- メディア: 単行本
- この商品を含むブログを見る
urllib.requestを使ってみる
- 画像を保存する
import urllib.request # URLと保存パスを指定 url = "http://uta.pw/shodou/img/28/214.png" savename = "test2.png" # ダウンロード mem = urllib.request.urlopen(url).read() # ファイルへ保存 withを使うと自動で、fileをcloseしてくれる。 with open(savename, mode="wb") as f: f.write(mem) print("保存しました")
- データを取得する
import urllib.request import urllib.parse API = "http://api.aoikujira.com/zip/xml/get.php" values = { 'fmt': 'xml', 'zn': '1500042' } # パラメーターをURLエンコードする。これは何気に重要 params = urllib.parse.urlencode(values) # リクエスト用のURLを生成。?はGETメソッドかな。複数を指定の場合は、&を使う url = API + "?" + params print("url=", url) # ダウンロード data = urllib.request.urlopen(url).read() text = data.decode("utf-8") print(text)
beautifulsoupを使ってみる。
便利そうやなぁ!
from bs4 import BeautifulSoup # 解析したいHTML html = """ <html><body> <h1 id="title">スクレイピングとは?</h1> <p id="body">webページを解析すること。</p> <p>任意の箇所を抽出すること。</p> <ul> <li><a href="http://uta.pw">uta</a></li> <li><a href="http://oto.chu.jp">oto</a></li> </ul> <body></html> """ # htmlを解析する soup = BeautifulSoup(html, 'html.parser') # 任意の部分を抽出する h1 = soup.html.body.h1 p1 = soup.html.body.p p2 = p1.next_sibling.next_sibling # idで抽出する。 title = soup.find(id="title") body = soup.find(id="body") # find_all(メソッドで取り出す。この例では、<a>のものをまとめてゲットしている。 links = soup.find_all("a") # 要素をforで表示させる for a in links: href = a.attrs['href'] text = a.string print(text, ">", href) # 要素のテキストを表示する print("h1 = " + h1.string) print("p = " + p1.string) print("p = " + p2.string) print("#title=" + title.string) print("#body=" + body.string)
urlopen()とBeautifulSoupの組み合わせ
うーん、便利!
from bs4 import BeautifulSoup import urllib.request as req url = "http://api.aoikujira.com/zip/xml/1500042" # urlopen()でデータを取得 req = req.urlopen(url) # BeautifulSoupで解析 soup = BeautifulSoup(req, "html.parser") # 任意のデータを抽出 ken = soup.find("ken").string shi = soup.find("shi").string cho = soup.find("cho").string print(ken, shi, cho)
CSSセレクタを使う
from bs4 import BeautifulSoup # 解析したいHTML html = """ <html><body> <div id="meigen"> <h1 id="title">トルストイ名言</h1> <ul class="items"> <li>汝の心に教えよ、心に学ぶな</li> <li>謙虚な人は誰からも好かれる</li> <li>強い人間は、いつも気取らない</li> </ul> </div> <body></html> """ # htmlを解析する soup = BeautifulSoup(html, 'html.parser') # 任意の部分を抽出する h1 = soup.select_one("div#meigen > h1").string print("h1 = ", h1) li_list = soup.select("div#meigen > ul.items > li") for li in li_list: print("li = ", li.string)
これで一通り、データの取得は可能か!